home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / TP_ADV.ZIP / LIST1303.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-11-17  |  2.7 KB  |  126 lines

  1. Program MyList;
  2.  
  3. Uses
  4.   Crt,
  5.   ListUnit;
  6.  
  7. Type
  8.   MyObjPtr = ^MyObj;
  9.   MyObj = Object ( list )
  10.             Data : LongInt;
  11.             Constructor Init ( newData : LongInt; before, after : ListPtr );
  12.             Procedure SetData ( newData : LongInt ); Virtual;
  13.             Function GetData : LongInt; Virtual;
  14.             Function GetAfterLink : MyObjPtr;
  15.             Function GetBeforeLink : MyObjPtr;
  16.           End;
  17.  
  18. Constructor MyObj.Init ( newData : LongInt; before, after : ListPtr );
  19. Begin
  20.   List.Init ( before, after );
  21.   data := newData;
  22. End;
  23.  
  24. Procedure MyObj.SetData ( newData : LongInt );
  25. Begin
  26.   data := newData;
  27. End;
  28.  
  29. Function MyObj.GetData : LongInt;
  30. Begin
  31.   GetData := data;
  32. End;
  33.  
  34. Function MyObj.GetAfterLink : MyObjPtr;
  35. Begin
  36.   GetAfterLink := MyObjPtr ( List.GetAfterLink );
  37. End;
  38.  
  39. Function MyObj.GetBeforeLink : MyObjPtr;
  40. Begin
  41.   GetBeforeLink := MyObjPtr ( List.GetBeforeLink );
  42. End;
  43.  
  44. Procedure Display ( l : MyObjPtr );
  45. Var
  46.   ch  : Char;
  47.   tmp : MyObjPtr;
  48. Begin
  49.   tmp := l;
  50.   If ( l <> NIL ) Then
  51.     Repeat
  52.       WriteLn ( tmp^.GetData );
  53.       tmp := tmp^.GetAfterLink;
  54.     Until ( tmp = NIL );
  55.   WriteLn;
  56.   ch := ReadKey;
  57. End;
  58.  
  59. Var
  60.   head,
  61.   l1,
  62.   l2,
  63.   l3 : MyObjPtr;
  64.  
  65. Begin
  66.   New ( head, init ( 613, NIL, NIL ) ); { Initialize Head pointer }
  67.   l1 := head;
  68.   New ( l2, init ( 314159, l1, NIL ) );      { Add item to end of list }
  69.   l1 := l2;
  70.   New ( l2, init ( 1111, l1, NIL ) );     { Add item to end of list }
  71.   New ( l3, init ( 1234, l1, l2 ) );    { Insert between l1 & l2 }
  72.  
  73.   ClrScr;
  74.   Display ( head );
  75.  
  76.   l1 := head;
  77.   While ( l1 <> NIL ) AND ( l1^.GetData <> 1234 ) Do
  78.     l1 := l1^.GetAfterLink;
  79.   If ( l1 <> NIL ) Then
  80.     Dispose ( l1, Done );
  81.  
  82.   Display ( head );
  83.  
  84.   l1 := head;
  85.   While ( l1 <> NIL ) AND ( l1^.GetData <> 1111 ) Do
  86.     l1 := l1^.GetAfterLink;
  87.   If ( l1 <> NIL ) Then
  88.     Dispose ( l1, Done );
  89.  
  90.   Display ( head );
  91.  
  92.   l1 := head;
  93.   While ( l1 <> NIL ) AND ( l1^.GetData <> 0 ) Do
  94.     l1 := l1^.GetAfterLink;
  95.   If ( l1 <> NIL ) Then
  96.     Dispose ( l1, Done );
  97.  
  98.   Display ( head );
  99.  
  100.   l1 := head;
  101.   head := head^.GetAfterLink;  { Needed because you are deleting the Head }
  102.   While ( l1 <> NIL ) AND ( l1^.GetData <> 613 ) Do
  103.     l1 := l1^.GetAfterLink;
  104.   If ( l1 <> NIL ) Then
  105.     Dispose ( l1, Done );
  106.  
  107.   Display ( head );
  108.  
  109.   l1 := head;
  110.   head := NIL;        { Needed because the list is now empty }
  111.   While ( l1 <> NIL ) AND ( l1^.GetData <> 314159 ) Do
  112.     l1 := l1^.GetAfterLink;
  113.   If ( l1 <> NIL ) Then
  114.     Dispose ( l1, Done );
  115.  
  116.   Display ( head );
  117.  
  118.   l1 := head;
  119.   While ( l1 <> NIL ) AND ( l1^.GetData <> 0 ) Do
  120.     l1 := l1^.GetAfterLink;
  121.   If ( l1 <> NIL ) Then
  122.     Dispose ( l1, Done );
  123.  
  124.   Display ( head );
  125. End.
  126.