MODULE LinListPerson; (* Uebung 9.4, Einstieg Pointer, Lineare Liste, geordnet Einfuegen und Loeschen *) IMPORT In,Out; TYPE String=ARRAY 32 OF CHAR; Elem=POINTER TO Elemdesc; (* Pointer auf Kasten mit Name und Koerpergroesse der Person *) Elemdesc=RECORD Name: String; Groesse:INTEGER; next: Elem; END; List=RECORD (* Liste mit Zeiger auf erstes Element *) first: Elem; END; PROCEDURE Insert(VAR Liste:List; Lastname:String; size:INTEGER); (* an richtige Position einfuegen *) VAR data,temp,prev: Elem; BEGIN NEW(data); (* Neues Kaestchen erzeugen *) data^.Name:=Lastname; (* Daten einfuellen *) data^.Groesse:=size; data^.next:=NIL; IF Liste.first=NIL THEN Liste.first:=data; (* Falls Liste noch leer: vorne einhaengen *) ELSIF (Liste.first^.Groesse>data^.Groesse) THEN data^.next:=Liste.first; Liste.first:=data; (* Falls es an den Anfang gehoert: vorne einhaengen *) ELSE temp:=Liste.first^.next; (* sonst: solange durch die Liste bis entweder *) prev:=Liste.first; (* am richtigen Platz oder am Ende der Liste *) WHILE (temp#NIL) & (temp^.Groesse