DINAMISCHE STRUKTUREN FACHBEGRIFFE 1. DER POINTERDER POINTER 2. DER BUFFERDER BUFFER 3. DER...
-
Upload
ulbrecht-stogner -
Category
Documents
-
view
106 -
download
1
Transcript of DINAMISCHE STRUKTUREN FACHBEGRIFFE 1. DER POINTERDER POINTER 2. DER BUFFERDER BUFFER 3. DER...
DINAMISCHE STRUKTUREN
• FACHBEGRIFFE 1. DER POINTER
2. DER BUFFER
3. DER KNOTEN
• DIE EINFACHVERKETTETE LISTE DEFINITION
• LISTENOPERATIONEN1. AUFBAU
2. DURCHLAUFEN (AUSGEBEN DER ELEMENTEN AUF DEN BILDSCHIRM)
3. EINFÜGEN
4. LÖSCHEN
5. SUCHEN 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 adrP
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,
x1, x2 … xn , die mit einander in einer bestimmten Reihenfolge verbunden sind
Info1 adr2 Info2 adr3 Infon nil
adr1 adr2 adrn
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
wurzelneu
neu wurzel
neu
neu
neu
neu
wurzel
wurzel
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
wurzelneu
neu wurzel
neu
neu
neu
neu
wurzel
wurzel
wurzel
nilwurzel
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
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
neu neu^.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
adrp
q q
neu neu^.adr
nil
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
adr
P
q
k-2 k-1 k
q
neu neu^.adr
q^.adr
Einfügen eines Knoten nach den K-nte KnotenFunction 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
adr
P
q
k-1 k k+1
q
neu neu^.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
adr info adr
adr
P
q
inf=info
q
neu neu^.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
P
q
inf=info
q
neu neu^.adr
q^.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
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
adrp
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 adr adrp
q
nil
q
q^.adr q^.adr^.adr
Löschen des K-nten KnotenFunction 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 adr adr adrp
q
nil
adr adr
k-2 k-1 k k+1
q x x^.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
adr info adr adr adrp
q
nil
adr adr
inf=info
q x x^.adrq^.adr
Löschen der ganzen Liste
procedure loschen (p: adresse);
begin
dispose (p);
end;
RUN
adrp
nil