home *** CD-ROM | disk | FTP | other *** search
- Program MyList;
-
- Uses
- Crt,
- ListUnit;
-
- Type
- MyObjPtr = ^MyObj;
- MyObj = Object ( list )
- Data : LongInt;
- Constructor Init ( newData : LongInt; before, after : ListPtr );
- Procedure SetData ( newData : LongInt ); Virtual;
- Function GetData : LongInt; Virtual;
- Function GetAfterLink : MyObjPtr;
- Function GetBeforeLink : MyObjPtr;
- End;
-
- Constructor MyObj.Init ( newData : LongInt; before, after : ListPtr );
- Begin
- List.Init ( before, after );
- data := newData;
- End;
-
- Procedure MyObj.SetData ( newData : LongInt );
- Begin
- data := newData;
- End;
-
- Function MyObj.GetData : LongInt;
- Begin
- GetData := data;
- End;
-
- Function MyObj.GetAfterLink : MyObjPtr;
- Begin
- GetAfterLink := MyObjPtr ( List.GetAfterLink );
- End;
-
- Function MyObj.GetBeforeLink : MyObjPtr;
- Begin
- GetBeforeLink := MyObjPtr ( List.GetBeforeLink );
- End;
-
- Procedure Display ( l : MyObjPtr );
- Var
- ch : Char;
- tmp : MyObjPtr;
- Begin
- tmp := l;
- If ( l <> NIL ) Then
- Repeat
- WriteLn ( tmp^.GetData );
- tmp := tmp^.GetAfterLink;
- Until ( tmp = NIL );
- WriteLn;
- ch := ReadKey;
- End;
-
- Var
- head,
- l1,
- l2,
- l3 : MyObjPtr;
-
- Begin
- New ( head, init ( 613, NIL, NIL ) ); { Initialize Head pointer }
- l1 := head;
- New ( l2, init ( 314159, l1, NIL ) ); { Add item to end of list }
- l1 := l2;
- New ( l2, init ( 1111, l1, NIL ) ); { Add item to end of list }
- New ( l3, init ( 1234, l1, l2 ) ); { Insert between l1 & l2 }
-
- ClrScr;
- Display ( head );
-
- l1 := head;
- While ( l1 <> NIL ) AND ( l1^.GetData <> 1234 ) Do
- l1 := l1^.GetAfterLink;
- If ( l1 <> NIL ) Then
- Dispose ( l1, Done );
-
- Display ( head );
-
- l1 := head;
- While ( l1 <> NIL ) AND ( l1^.GetData <> 1111 ) Do
- l1 := l1^.GetAfterLink;
- If ( l1 <> NIL ) Then
- Dispose ( l1, Done );
-
- Display ( head );
-
- l1 := head;
- While ( l1 <> NIL ) AND ( l1^.GetData <> 0 ) Do
- l1 := l1^.GetAfterLink;
- If ( l1 <> NIL ) Then
- Dispose ( l1, Done );
-
- Display ( head );
-
- l1 := head;
- head := head^.GetAfterLink; { Needed because you are deleting the Head }
- While ( l1 <> NIL ) AND ( l1^.GetData <> 613 ) Do
- l1 := l1^.GetAfterLink;
- If ( l1 <> NIL ) Then
- Dispose ( l1, Done );
-
- Display ( head );
-
- l1 := head;
- head := NIL; { Needed because the list is now empty }
- While ( l1 <> NIL ) AND ( l1^.GetData <> 314159 ) Do
- l1 := l1^.GetAfterLink;
- If ( l1 <> NIL ) Then
- Dispose ( l1, Done );
-
- Display ( head );
-
- l1 := head;
- While ( l1 <> NIL ) AND ( l1^.GetData <> 0 ) Do
- l1 := l1^.GetAfterLink;
- If ( l1 <> NIL ) Then
- Dispose ( l1, Done );
-
- Display ( head );
- End.
-