Einzelnen Beitrag anzeigen

Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#1

Hilfe bei doppelter verkettete Liste

  Alt 2. Nov 2006, 15:09
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
  Mit Zitat antworten Zitat