home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programming Unleashed / Delphi_Programming_Unleashed_SAMS_Publishing_1995.iso / chap16 / linklst1 / linklst1.dpr next >
Text File  |  1995-03-20  |  2KB  |  108 lines

  1. program LinkLst1;
  2.  
  3. { Program copyright (c) 1995 by Charles Calvert }
  4. { Project Name: LINKLST1 }
  5.  
  6. uses
  7.   WinCrt;
  8.  
  9. type
  10.   PMyRecord = ^TMyRecord;
  11.   TMyRecord = Record
  12.     Name: String;
  13.     Next: PMyRecord;
  14.   end;
  15.  
  16. var
  17.   Total: Integer;
  18.  
  19.  
  20. function Int2Str(L : LongInt) : string;
  21. { Converts an integer to a string for use with OutText, OutTextXY }
  22. var
  23.   S : string;
  24. begin
  25.   Str(L, S);
  26.   Int2Str := S;
  27. end; { Int2Str }
  28.  
  29. procedure CreateNew(var Item: PMyRecord);
  30. begin
  31.   New(Item);
  32.   Item^.Next := nil;
  33.   Item^.Name := '';
  34. end;
  35.  
  36. procedure GetData(var Item: PMyRecord);
  37. begin
  38.   Item^.Name := 'Sam' + Int2Str(Total);
  39. end;
  40.  
  41. procedure DoFirst(var First, Current: PMyRecord);
  42. begin
  43.   CreateNew(Current);
  44.   GetData(Current);
  45.   First := Current;
  46. end;
  47.  
  48. procedure Add(var Current: PMyRecord);
  49. var
  50.   Prev: PMyRecord;
  51. begin
  52.   Prev := Current;
  53.   CreateNew(Current);
  54.   GetData(Current);
  55.   Prev^.Next := Current;
  56. end;
  57.  
  58. { Here is an alternate version of the Add procedure }
  59. procedure Add2(var Current: PMyRecord);
  60. var
  61.   Temp: PMyRecord;
  62. begin
  63.   CreateNew(Temp);
  64.   GetData(Temp);
  65.   Current^.Next := Temp;
  66.   Current := Temp;
  67. end;
  68.  
  69. procedure Show(Head: PMyRecord);
  70. begin
  71.   while Head^.Next <> nil do begin
  72.     WriteLn(Head^.Name);
  73.     Head := Head^.Next;
  74.   end;
  75.   WriteLn(Head^.Name);
  76. end;
  77.  
  78. procedure FreeAll(var Head: PMyRecord);
  79. var
  80.   Temp: PMyRecord;
  81. begin
  82.   while Head^.Next <> nil do begin
  83.     Temp := Head^.Next;
  84.     Dispose(Head);
  85.     Head := Temp;
  86.   end;
  87.   Dispose(Head);
  88. end;
  89.  
  90. var
  91.   First,
  92.   Current: PMyRecord;
  93. begin
  94.   HeapLimit := 0;
  95.   ClrScr;
  96.   WriteLn('Memavail = ', MemAvail);
  97.   Total := 1;
  98.   DoFirst(First, Current);
  99.   repeat
  100.     Inc(Total);
  101.     Add(Current);
  102.   until Total > 20;
  103.   Show(First);
  104.   FreeAll(First);
  105.   WriteLn('MemAvail = ', MemAvail);
  106.   ReadLn;
  107. end.
  108.