DINAMISCHE STRUKTUREN FACHBEGRIFFE 1. DER POINTERDER POINTER 2. DER BUFFERDER BUFFER 3. DER KNOTENDER KNOTEN DIE EINFACHVERKETTETE LISTE DEFINITION DEFINITION LISTENOPERATIONEN 1. AUFBAUAUFBAU 2. DURCHLAUFEN (AUSGEBEN DER ELEMENTEN AUF DEN BILDSCHIRM)DURCHLAUFEN 3. EINFÜGENEINFÜGEN 4. LÖSCHENLÖSCHEN 5. SUCHEN EINES ELEMENTSSUCHEN EINES ELEMENTS
Pointer ( Adresse) ^ Type adrint= ^ integer; adrreal= ^ real; var adr1, adr2 : adrint; adr3, adr4 : adrreal; adr5 : ^ integer; adr6 : ^ real; ….. Adr1:= adr2;richtig adr3:= adr1;falsch adr1:=adr5; falsch adr6:=adr3: falsch Var a: integer; adrint: ^ integer; …… a:=6; write (a);(6) adrint:= ^ a; write (adrint ^ )(6) write(adrint) ist nicht möglich
Der Knoten Type adresse=^knoten knoten= record info: integer; adr : adresse; end; var p : adresse; info adr P
Der Buffer (HEAP) Procedure NEW (var p:adresse) versichert Speicherplatz im Buffer Procedure DISPOSE ( var p: adresse) befreit den Speicherplatz
Definition Eine Sammlung von n > 0 Knoten, x 1, x 2 … x n, die mit einander in einer bestimmten Reihenfolge verbunden sind Info 1 adr 2 Info 2 adr 3 Info n nil adr 1 adr 2 adr n Nil hat die Bedeutung : keine Adresse, es ist der letzte Knoten der Liste.
Aufbau einer Liste mit n Knoten function aufbau : adresse; var i,n : integer; wurzel, neu : adresse; begin write( die Anzahl der Knoten ist:); readln(n); new(wurzel); wurzel :=nil; writeln(die eingegebene Zahlen sind :); for i := 1 to n do begin new (neu); readln(neu^.info); neu^.adr:=wurzel; wurzel := neu; end; aufbau := wurzel; end; RUN wurzel nil wurzel neu wurzel neu wurzel nil wurzel { oder neu^.info:=i
Aufbau einer Liste aus der Zahlen die eingegeben werden bis 0 trifft function aufbau : adresse; var i,n : integer; wurzel, neu : adresse; begin write( die erste Zahl ist:); new(wurzel); wurzel :=nil; writeln(die eingegebene Zahlen sind :); while n <> 0 do begin new (neu); neu^.info := n; neu^.adr:=wurzel; wurzel := neu; readln(n); end; aufbau := wurzel; end; RUN wurzel nil wurzel neu wurzel neu wurzel nil wurzel
Durchlaufen Ausgeben der Elementen auf den Bildschirm Procedure durchlaufen (p: adresse); var q : adresse; begin q := p; writeln ( die Knoten enthalden die folgenden Daten : ); while q <> nil do begin write (q^.info,,); q := q^.adr; end; RUN
Einfügen 1. Einfügen eines Knoten am Kopf der Listeam Kopf 2. Einfügen eines Knoten am Ende der Listeam Ende 3. Einfügen eines Knoten vor den K-nte Knotenvor den K-nte 4. Einfügen eines Knoten nach den K-nte Knotennach den K-nte 5. Einfügen eines Knoten vor den Knoten mit einer beliebigen Informationvor den Knoten mit einer beliebigen Information 6. Einfügen eines Knoten nach den Knoten mit einer beliebigen Informationnach den Knoten mit einer beliebigen Information
Einfügen eines Knoten am Kopf der Liste Function einfugen(p:adresse) : adresse; var neu : adresse; begin new( neu); writeln(die neue Information ist : ); readln(neu^.info); neu^.adr:=p; einfugen:=neu; end; RUN neuneu^.adr p nil
Einfügen eines Knoten am Ende der Liste Function einfugen(p:adresse) : adresse; var q, neu : adresse; begin q := p; while q^.adr <> nil do q:= q^. adr; new(neu); writeln(die neue Information ist : ); readln(neu^.info); neu^.adr:=nil; q^.adr:=neu; einfugen:=p; end; RUN adr p qq neu neu^.adr nil
Einfügen eines Knoten vor den K-nte Knoten Function einfugen(p:adresse):adresse; var neu,q: adresse; k,i :integer; begin q:=p; writeln(k ist : ); readln (k); for i :=1 to k-2 do q:=q^.adr; new(neu); writeln(die neue Information ist : ); readln(neu^.info); neu^.adr:=q^.adr; q^.adr:=neu; einfugen:=p; end; RUN adr PqPq k-2 k-1 k q neuneu^.adr q^.adr
Einfügen eines Knoten nach den K-nte Knoten Function einfugen(p:adresse):adresse; var neu,q: adresse; k,i :integer; begin q:=p; writeln(k ist : ); readln (k); for i :=1 to k-1 do q:=q^.adr; new(neu); writeln(die neue Information ist : ); readln(neu^.info); neu^.adr:=q^.adr; q^.adr:=neu; einfugen:=p; end; RUN adr PqPq k-1 k k+1 q neuneu^.adr q^.adr
Einfügen eines Knoten vor den Knoten mit einer beliebigen Information Function einfugen(p:adresse):adresse; var neu,q: adresse; inf :integer; begin q:=p; writeln(die gesuchte Information ist :); readln (inf); while q^.adr^.info<> inf do q:=q^.adr; new(neu); writeln(die neue Information ist : ); readln(neu^.info); neu^.adr:=q^.adr; q^.adr:=neu; einfugen:=p; end; RUN adrinfo adr adr PqPq inf=info q neuneu^.adr q^.adr
Einfügen eines Knoten nach den Knoten mit einer beliebigen Information Function einfugen(p:adresse):adresse; var neu,q: adresse; inf :integer; begin q:=p; writeln(die gesuchte Information ist : ); readln (inf); while q^.info<> inf do q:=q^.adr; new(neu); writeln(die neue Information ist : ); readln(neu^.info); neu^.adr:=q^.adr; q^.adr:=neu; einfugen:=p; end; RUN info adr adr PqPq inf=info q neuneu^.adr q^.adr
Löschen 1. Löschen des ersten Knoten der Listedes ersten Knoten 2. Löschen des letzten Knoten der Listedes letzten Knoten 3. Löschen des K-nten Knotendes K-nten Knoten 4. Löschen des Knoten mit einer beliebigen Informationdes Knoten mit einer beliebigen Information 5. Löschen der ganzen Listeder ganzen Liste
Suchen eines beliebigen Elements procedure suchen (p: adresse); var q:adresse; inf :integer; ok: boolean; begin writeln(die gesuchte Information ist:); readln (inf); ok:=false; q:= p; while (q<> nil) AND(inf<>q^.info) do begin if inf= q^.info then ok:=true; q:= q^.adr; end; if ok=true then writeln(die Information exitiert in der Liste) else writeln(die Information exitiert in der Liste nicht); end; RUN
Löschen des ersten Knoten der Liste function loschen(p : adresse) : adresse; var q: adresse; begin q:=p ^.adr; dispose (p); loschen:= q; end; RUN adr p p^.adr q nil
Löschen des letzten Knoten der Liste Function loschen ( p : adresse) : adresse; var q:adresse; begin q:= p; while q^.adr^.adr<> nil do q:= q^.adr; dispose( q^.adr); q^. adr:= nil; loschen := p; end; RUN adr pqpq nil q q^.adrq^.adr^.adr
Löschen des K-nten Knoten Function loschen (p: adresse): adresse; var q, x: adresse; k, i : integer; begin Writeln(wie vielter Knoten wird gelöscht? ); readln(k); q:=p; for i := 1 to k - 2 do q:= q^.adr; x:=q^.adr; q^.adr:=x^.adr; dispose(x); loschen := p; end; RUN adr pqpq nil adr k-2k-1 k k+1 q xx^.adrq^.adr
Löschen des Knoten mit einer beliebigen Information Function loschen (p: adresse): adresse; var q, x: adresse; inf: integer; begin Writeln(welche Information wird gelöscht? ); readln(inf); q:=p; while q^.adr^.info<> inf do q:= q^.adr; x:=q^.adr; q^.adr:=x^.adr; dispose(x); loschen := p; end; RUN adrinfo adr adr pqpq nil adr inf=info q xx^.adrq^.adr
Löschen der ganzen Liste procedure loschen (p: adresse); begin dispose (p); end; RUN adr p nil