|
|
@@ -0,0 +1,87 @@
|
|
|
+IMPLEMENTATION MODULE SingleLinkedList;
|
|
|
+
|
|
|
+FROM SYSTEM IMPORT ADDRESS;
|
|
|
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
|
|
|
+
|
|
|
+TYPE
|
|
|
+ ElementPtr = POINTER TO Element;
|
|
|
+ Element = RECORD
|
|
|
+ pos : CARDINAL;
|
|
|
+ next : ElementPtr;
|
|
|
+ item : ADDRESS;
|
|
|
+ END;
|
|
|
+ List = POINTER TO ListRec;
|
|
|
+ ListRec = RECORD
|
|
|
+ firstElement : ElementPtr;
|
|
|
+ lastElement : ElementPtr;
|
|
|
+ homogene : BOOLEAN; (* allows or not homogene items *)
|
|
|
+ CheckType : PROC; (* procedure to check if the elements are of the same type *)
|
|
|
+ END;
|
|
|
+
|
|
|
+
|
|
|
+(*
|
|
|
+PROCEDURE SearchItem ( item : ; compare : PROC ) : BOOLEAN;
|
|
|
+
|
|
|
+ BEGIN
|
|
|
+ ;
|
|
|
+ END Seach;
|
|
|
+
|
|
|
+PROCEDURE Traverse (l : List; toDo : PROC);
|
|
|
+
|
|
|
+ BEGIN
|
|
|
+ ;
|
|
|
+ END Traverse;
|
|
|
+*)
|
|
|
+PROCEDURE Empty (l : List): BOOLEAN ;
|
|
|
+
|
|
|
+ BEGIN
|
|
|
+ IF l^.firstElement = NIL THEN
|
|
|
+ RETURN TRUE
|
|
|
+ ELSE
|
|
|
+ RETURN FALSE
|
|
|
+ END
|
|
|
+ END Empty;
|
|
|
+(*
|
|
|
+PROCEDURE RemoveItem (): BOOLEAN;
|
|
|
+
|
|
|
+ BEGIN
|
|
|
+ ;
|
|
|
+ END Remove;
|
|
|
+
|
|
|
+PROCEDURE AddItem (): BOOLEAN;
|
|
|
+
|
|
|
+ BEGIN
|
|
|
+ ;
|
|
|
+ END Add;
|
|
|
+
|
|
|
+*)
|
|
|
+
|
|
|
+PROCEDURE DeleteAllItems (l : List);
|
|
|
+
|
|
|
+BEGIN
|
|
|
+
|
|
|
+END DeleteAllItems;
|
|
|
+
|
|
|
+PROCEDURE Free ( VAR l : List);
|
|
|
+
|
|
|
+BEGIN
|
|
|
+ DeleteAllItems(l);
|
|
|
+ l^.firstElement := NIL;
|
|
|
+ l^.homogene := TRUE ;
|
|
|
+ l^.CheckType := NIL;
|
|
|
+ DISPOSE (l);
|
|
|
+END Free;
|
|
|
+
|
|
|
+PROCEDURE Init ( VAR l : List; mode : BOOLEAN ; p : PROC );
|
|
|
+
|
|
|
+ BEGIN
|
|
|
+ NEW (l);
|
|
|
+ l^.firstElement := NIL;
|
|
|
+ l^.homogene := mode;
|
|
|
+ l^.CheckType := p;
|
|
|
+ END Init;
|
|
|
+
|
|
|
+BEGIN
|
|
|
+ (* Initialization of the SingleLinkedList structure *)
|
|
|
+
|
|
|
+END SingleLinkedList.
|