So erstellen eine doppelt verknüpfte Liste in C-Programmierung

September 5

So erstellen eine doppelt verknüpfte Liste in C-Programmierung

Programmierer verwenden verknüpfte Listen als linear überfahrbar Datenstrukturen. Dies bedeutet, dass der Programmierer kann am Anfang der Liste starten (genannt den Kopf) und vorwärts durch die Liste ein Element zu einem Zeitpunkt. Diese Methode der Datenspeicherung kann auch der Programmierer der Liste eine vielseitigere Alternative zu bestimmten anderen Datenstrukturen wie dynamische Arrays effizient Daten hinzu. Dieses Beispiel zeigt wie man eine einfache doppelt verknüpfte Liste, zu konstruieren, die Navigation in der Liste von zwei Richtungen (vorwärts und rückwärts) erlaubt.

Anweisungen

1 Erstellen Sie die Knotenstruktur, die als Datentyp der verknüpften Liste dienen wird. Geben Sie im Text-Editor den folgenden Code:

enthalten < stdlib.h > wichtigsten {int

Struct ListNode {}

Int-Daten;

Strebe ListNode * zurück;

Strebe ListNode * nächste;

};

return 0;

}

Der "Struct ListNode" Codeblock erstellt eine Vorlage für die Elemente, die die Liste gefüllt werden. Diese Vorlage definiert eine ListNode enthält drei Elemente: ein Datenelement (eine Ganzzahl) und Verweise auf die vorhergehenden und folgenden Elemente in der Liste. Ein Zeiger ist eine Variable, die eine Speicheradresse enthält. Zeiger werden zum Verweisen auf andere Datenstrukturen in Tiefe Erinnerung und dynamische Speicherzuweisung während der Codeausführung verwendet.

2 Deklarieren Sie die Variablen, die die Listenstruktur organisieren werden. Dieser Beispielcode in die Textdatei einfügen:

Int-Größe;

ListNode * Kopf;

ListNode * Schwanz;

Schwanz = Kopf;

Kopf = Schwanz;

Diese zwei Zeiger sind der Anfang und das Ende der Liste. Mit diesen Zeigern, weiß der Programmierer, wo der Anfang der Liste ist und wo das Ende ist einfach durch die Überprüfung, ob der aktuelle Knoten der "Kopf" oder "Schwanz" Zeiger ist. Beide verweisen zurück auf einander im Falle eine leere Liste.

3 Erstellen Sie einen einfachen Algorithmus um Elemente aus der verknüpften Liste anzufügen. Folgen Sie diesen Beispielcode:

leere anfügen (Int Num) {}

Struct ListNode * Tracer = Kopf;

Struct ListNode NewNode = (Struct ListNode) Malloc (Sizeof (Struct ListNode));

-> NewNode = Num;

Wenn (Kopf == NULL) {}

head = newNode;

tail = newNode;

newNode->prev = head;

newNode->next = tail;

}

Else {}

while (tracer->next != tail)

{tracer = tracer->next;}

newNode->prev = tracer;

newNode->next = tail;

tracer->next = node;

tail = node;

}

Größe ++;

}

Dieser Code fügt einen Knoten an das Ende der Liste. Zunächst erstellen einen Zeiger auf den Anfang der Liste ("Tracer"). Dann, wird einen Zeiger auf eine dynamisch reservierten Speicherblock für eine neu erstellte ListNode (NewNode) beiseite und legt die Daten dieses Knotens auf die ganze Zahl "Num". Der Kopf verweist auf NULL (d.h. die Liste ist leer, da der Kopf auf nichts zeigt), dann der Code den Knoten am Anfang der Liste eingefügt. Andernfalls Schleife "While" durchläuft die Knoten in der Liste, bis Sie den letzten Knoten erreichen. Wenn "Tracer" bis zum letzten Element der Liste zeigt, fügt der Code den Knoten. Der letzte Befehl fügt auf die "Größe" ganze Zahl, die Verfolgung der Elemente in der Liste.

4 Erstellen Sie einen Algorithmus zum Entfernen und vom Ende der Liste Posten:

privatevoid removeNode() {}

Wenn (Schwanz! = Kopf) {}

Struct ListNode * Ende = Schwanz;

Schwanz = Schwanz -> Prev;

Free(End);

Größe--;

}

}

Dieser Code erstellt einen Zeiger ("End") auf das letzte Element der Liste (das gleiche Element "Schwanz" Punkt). Schwanz ist legen Sie anschließend auf das Element unmittelbar vor dem letzten Element (der Knoten, auf den der Zeiger "Prev" des letzten Elements) hinzu. Schließlich wird der letzte Knoten, vom "Ende", verwendete Speicher für die weitere Benutzung freigegeben.

Tipps & Warnungen

  • Dies ist nur ein Skelett eine doppelt verknüpfte Liste. Andere Funktionen, z. B. Sortierung der Daten, Einfügung in die Mitte der Liste, und die Entfernung von der Mitte der Liste, kann diese grundlegende Funktionalität hinzugefügt werden.