Thema: Delphi Doppelt Verkettete Liste

Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Doppelt Verkettete Liste

  Alt 20. Jun 2007, 14:21
Man kann einen Listenanfang und ein Listenende definieren. Das sind zwei Knoten der Liste, die keine Daten enthalten aber eben garantiert immer am Anfang bzw. am Ende der Liste sind. Dann muss man nicht auf NIL prüfen.

Eine andere Möglichkeit besteht darin, das das letzte Element nicht auf NIL zeigt (als Nachfolger), sondern wieder auf die Listen-Wurzel (auch so ein Dummy-Element)

Also:

Delphi-Quellcode:
Procedure InitDList (aRoot : TNode);
Begin
  aRoot.lNext := aRoot;
  aRoot.lPrev := aRoot;
End;

Function FirstElement (aRoot : TNode) : TNode;
Begin
  If aRoot.Lnext = aRoot Then
    Result :=Nil
  Else
    Result := aRoot.lNext;
End;

Function LastElement (aRoot : TNode) : TNode;
Begin
  If aRoot.lPrev = aRoot Then
    Result := Nil
  Else
    Result := aRoot.lPrev;
End;

Procedure DeleteNode (aRoot : TNode; aKey : TKey);
Var
  p : TNode;

Begin
  p := FirstElement (aRoot);
  While (p<>nil) And (p.Key <> aKey) Do p := p.lNext; // Complete
  p.lPrev.lNext := p.lNext;
  p.lNext.lPrev := p.lPrev;
  Dispose (p);
End;
...
Ein Element nach seinem Index zu suchen ist eigentlich Schwachsinn, weil man dafür lieber ein Array nimmt.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat