220 likes | 361 Views
DINAMISCHE STRUKTUREN. FACHBEGRIFFE 1. DER POINTER 2. DER BUFFER 3. DER KNOTEN DIE EINFACHVERKETTETE LISTE DEFINITION LISTENOPERATIONEN 1. AUFBAU 2. DURCHLAUFEN ( AUSGEBEN DER ELEMENTEN AUF DEN BILDSCHIRM) 3. EINFÜGEN 4. LÖSCHEN 5. SUCHEN EINES ELEMENTS.
E N D
DINAMISCHE STRUKTUREN • FACHBEGRIFFE 1. DER POINTER 2. DER BUFFER 3. DER KNOTEN • DIE EINFACHVERKETTETE LISTEDEFINITION • LISTENOPERATIONEN 1. AUFBAU 2. DURCHLAUFEN(AUSGEBEN DER ELEMENTEN AUF DENBILDSCHIRM) 3. EINFÜGEN 4. LÖSCHEN 5. SUCHEN EINES ELEMENTS
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) Pointer ( Adresse) ^ write(adrint) ist nicht möglich
Type adresse=^knoten knoten= record info : integer; adr : adresse; end; var p : adresse; Der Knoten info adr P
Procedure NEW (var p:adresse) versichert Speicherplatz im Buffer Procedure DISPOSE ( var p: adresse) befreit den Speicherplatz Der Buffer (HEAP)
Definition Eine Sammlung von n > 0 Knoten, x1, x2 … xn , die mit einander in einer bestimmten Reihenfolge verbunden sind Info1 adr2 Info2 adr3 Infon nil adr1 adr2 adrn Nilhat die Bedeutung : keine Adresse, es ist der letzte Knoten der Liste.
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 Aufbau einer Liste mit n Knoten wurzel nil neu wurzel neu wurzel neu nil wurzel wurzel neu {oder neu^.info:=i wurzel neu neu wurzel
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 Aufbau einer Liste aus der Zahlen die eingegeben werden bis 0 trifft wurzel nil neu wurzel neu wurzel neu nil wurzel wurzel neu wurzel neu neu wurzel
DurchlaufenAusgeben 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; end; RUN
Einfügen 1. Einfügen eines Knoten am Kopf der Liste 2. Einfügen eines Knoten am Ende der Liste 3. Einfügen eines Knoten vor den K-nte Knoten 4. Einfügen eines Knoten nach den K-nte Knoten 5. Einfügen eines Knoten vor den Knoten mit einer beliebigen Information 6. Einfügen eines Knoten nach den Knoten mit einer beliebigen Information
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 Einfügen eines Knoten am Kopf der Liste p nil neu neu^.adr
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 Einfügen eines Knoten am Ende der Liste q q nil adr p nil adr neu neu^.adr
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 Einfügen eines Knoten vor den K-nte Knoten k-2 k-1 k P q adr q q^.adr adr neu neu^.adr
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 Einfügen eines Knoten nach den K-nte Knoten k-1 k k+1 P q adr q q^.adr adr neu neu^.adr
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 Einfügen eines Knoten vor den Knoten mit einer beliebigenInformation inf=info P q adr info adr q q^.adr adr neu neu^.adr
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 Einfügen eines Knoten nach den Knoten mit einer beliebigen Information inf=info P q info adr q q^.adr adr neu neu^.adr
Löschen 1. Löschen des ersten Knoten der Liste 2. Löschen des letzten Knoten der Liste 3. Löschen des K-nten Knoten 4. Löschen des Knoten mit einer beliebigen Information 5. Löschen der 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
function loschen(p : adresse) : adresse; var q: adresse; begin q:=p ^.adr; dispose (p); loschen:= q; end; RUN Löschen des ersten Knoten der Liste p^.adr p adr nil q
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 Löschen des letzten Knoten der Liste q q^.adr q^.adr^.adr p q adr adr adr nil
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 Löschen des K-nten Knoten k-2 k-1 k k+1 p q adr adr adr adr adr adr q^.adr x x^.adr q nil
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 Löschen des Knoten mit einer beliebigen Information inf=info p q adr adr adr info adr adr adr q^.adr x x^.adr q nil
Löschen der ganzen Liste procedure loschen (p: adresse); begin dispose (p); end; RUN p adr nil