Hallo,
mit deinem Wissen über Pointer, kannst du nun auch einfache verkette Listen erstellen. Wichtig für Ketten sind die While Schleifen, die du bei fast allen Aktionen brauchst (z.B beim Einfügen, Löschen und durchsuchen der Kette)
Delphi-Quellcode:
Type
pElementZeiger := ^tElement;
tElement := object
next :tElementZeiger;
inhalt: integer;
end;
Var
kopf : pElementZeiger; //Globale Variable die immer auf das erste Element der Liste zeigt.
Einfügen in die Liste geht dann z.B so:
Delphi-Quellcode:
Procedure InsertNewElement (content : integer);
Var hilf, newelement : pElementZeiger;
Begin
hilf := kopf^.next;
while (hilf<>nil) do
hilf := hilf^.next; //mit der Schleife kommt man ans Ende der Liste, wo dann das neue Element eingefügt wird
new(newelement);
newelement^.inhalt := content;
newelement.^next := nil;
hilf^.next := newelement;
end;
Das Ausgeben der Liste ist genauso einfach:
Delphi-Quellcode:
Procedure ShowList;
Var hilf :pElementZeiger;
Begin
hilf := kopf;
while (hilf^.next <> nil) do
begin
memo1.lines.Add (inttostr(hilf^.inhalt));
hilf := hilf^.next;
end;
end;
Suchen funktioniert ebenfalls mit der Schleife:
Delphi-Quellcode:
Procedure FindElement (content : integer);
Var hilf : pElementZeiger;
Begin
hilf := kopf;
while (hilf <> nil) do
begin
if hilf^.inhalt = content then
showmessage('Element gefunden: ' + inttostr(hilf^.inhalt));
hilf := hilf^.next;
end;
end;
Das löschen eines Elementes in der Liste ist schon komplizierter, da man darauf achten muss, dass die Zeiger später wieder auf die richtigen Elemente Zeigen und die Kette nicht auseinander bricht.
Delphi-Quellcode:
Procedure LoescheElement (content : integer);
Var hilf1, hilf2 : pelementZeiger;
Begin
Hilf1 := Kopf;
If Kopf^.inhalt = content then
begin
Kopf := Kopf^.next;
Dispose (hilf1);
end
else
Repeat
hilf2 := hilf1; hilf1 := hilf1^.next;
Until (Hilf1 = nil) or (Hilf1^.inhalt = content);
If Hilf1 <> nil then
begin
Hilf2^.next := Hilf1^.next;
Dispose (Hilf1);
end;
end;
So, ich denke das ist schonmal ein kleiner Überblick wie man mit einfach verketten Listen arbeitet. Doppelt verkette Listen haben nicht nur einen Zeiger auf das Nachfolge Elemnet, sondern auch einen Zeiger auf ihren Vorgänger. Dadurch werde Opperationen wie z.B das Löschen einfacher.
Die Quelltexte können Fehler beinhalten, da ich sie eben so aus dem Kopf aufgeschrieben habe. Ist schon wieder etwas her wo ich mich mit Listen beschäftigen musste.
Mfg Salomon