Hallo mal wieder!
Bräuchte mal ein wenig Hilfe...
Und zwar geht es um Erklärungen in Bezug auf eine doppelte verkettete Liste.
Delphi-Quellcode:
procedure TForm1.btnFirstClick(Sender: TObject);
begin
New(pNeuer_Wert); // Neues Element erzeugen
pNeuer_Wert^.Zahl := 1; // Zahl auf den Wert eins setzen
PNeuer_Wert^.Next := nil; // Next - Zeiger zeigt auf kein Element
PNeuer_Wert^.Prev := nil; // Prev - Zeiger zeigt auf kein Element
pErster_Wert := pNeuer_Wert; // Erster Wert Zeiger zeigen auf NIL
pVorheriger_Wert := pNeuer_Wert; // Zweiter Wert Zeiger zeigen auf NIL
btnFirst.Enabled := false; // Knopf ausblenden
end;
{*******************************************************************************
*******************************************************************************}
procedure TForm1.btnNextClick(Sender: TObject);
Var
Temp_Zahl : Integer; // Fürs Inkrementieren der Zahl
begin
if pNeuer_Wert = nil then btnFirst.Click; // Wenn neue Wert ins Nichts zeigt, dann
Temp_Zahl := pNeuer_Wert^.Zahl;
new(pNeuer_Wert); // Neuen Wert Speicher anlegen
pNeuer_Wert.Zahl := Temp_Zahl + 1;
pNeuer_Wert^.Prev := pVorheriger_Wert; // Neue Wert am Ende zeigt auf das vorherige Element
pNeuer_Wert^.Next := nil; // Neue Wert zeigt auf NIL
pVorheriger_Wert^.Next := pNeuer_Wert; // Zeiger des vorherigen Elementes muss auf das neu erzeugte Element gesetzt werden
pVorheriger_Wert := pNeuer_Wert; // ??
btnRead.Click;
end;
{*******************************************************************************
*******************************************************************************}
procedure TForm1.btnReadClick(Sender: TObject);
begin
if pVorheriger_Wert = nil then Exit; //??
lbElemente.Clear;
pAktueller_Wert := pVorheriger_Wert; //??
While pAktueller_Wert^.Prev <> nil Do //??
Begin // Solange letzter Wert ungleich nil,
lbElemente.Items.Add(IntToStr(pAktueller_Wert^.Zahl));
lbSpeicheradressen.Items.Add('');
lbSpeicheradressen.Items.Add(Format('Next : x%x', [Integer(pAktueller_Wert^.Next)]));
lbSpeicheradressen.Items.Add(Format('Prev : x%x', [Integer(pAktueller_Wert^.Prev)]));
pAktueller_Wert := pAktueller_Wert.Prev; // Letzter Wert dem aktuellen Wert zuweisen
End;
end;
{*******************************************************************************
*******************************************************************************}
Alles was ich mit / ?? Markiert habe, ist mir nicht ganz klar.
Ich habe das Grundprinzip verstanden, aber ich verstehe diese Zeilen nicht ganz. Wenn mir jemand verständlich erklären könnte, wieso man diese Zeilen so schreiben muss oder wieso sie so stehen müssen, dann wäre ich euch schon sehr dankbar.
Danke schonmal im voraus für die Hilfe.
Gruß
Matthias