Der Double-Linked-List

Verknüpfte Listen können sehr nützlich sein, für eine Reihe von Gründen - obwohl sie einige Zeit dauern, deinen Geist um das Konzept zu wickeln. Was ist schlimmer? Die doppelt verknüpften Liste.

Anstatt nur auf die nächste Struktur verknüpfen vorwärts, ein Doppelverbundliste auch Links zurück zum vorhergehenden Struktur.

Der folgende Code zeigt eine interaktive, doppelt verknüpfte Liste Programm. Es ist massiv. Vergleichen Sie es mit der verknüpften Liste Code in diesem Buch die zusätzlichen Schritte, um zu sehen, ergriffen die beiden vorderen und hinteren Zeiger innerhalb der Struktur zu erhalten.

/ * Ein interaktives doppelt verkettete Liste Programm * // * Dan Gookin, beginnend mit C-Programmierung für Dummies * / # include # include # include Struktur typisch {int Wert-Struktur typische * Next-Struktur typische * vorige -} - Struktur typisch * First-Struktur typische * Strom-Struktur typische * new-int-Menü (void) -Lücke (void) -Lücke Show (void) hinzufügen -Lücke (void) -Lücke dump (void) löschen -struct typisch * erstellen (void) - / * die Hauptfunktion arbeitet mit Eingangs only.Everything sonst durch eine Funktion * / int main () {int choice = ' 0' behandelt wird - / * erhalten die while-Schleife * Spin / erste NULL-while = (Wahl! = 'Q') {Wahl = Menü () - Schalter (Wahl) {case 'S': Show () - Break-case 'A': add () - Break-case 'R': delete () - Break- Fall 'D': dump () - Break-case 'Q': break-default: break -}} return (0) -} / * das Hauptmenü zur Anzeige und Eingabe * / int Menü (void) {int CH- sammeln printf ( "S), wie A) dd, R) emove, D) UMP, Q) uit:") CH = getchar () - während (getchar () = ' n') / * entfernen überschüssiges Eingabe *! / -return (toupper (ch)) -} / * ein Element am Ende der verknüpften Liste * / void add (void) hinzufügen {if (first == NULL) / * Sonderfall für den ersten Punkt * / {erste = create () - Strom = first-strom-> previous = NULL-} else / * finden das letzte Element * / {current = first-while (strom-> next) / * letzte Element == NULL * / current = Strom -> next-new = create () - strom-> next = new - / * Update-Link * / Neuheit-> previous = Strom-current = neuen-} printf ( "Geben Sie einen Wert:") -scanf ( "% d "strom-> value) -current-> next = NULL-while (getchar () = ' n') / * Überschuss Eingang entfernen * / -} / * Anzeige aller Strukturen in der verknüpften Liste * / void show ( void) {int count = 1-if (erste == NULL) / * diese Liste ist leer * / {puts ( "Nichts zu zeigen") - Rücklauf-} puts ( "alle Datensätze") - Strom = erster während (Strom) / * letzte Datensatz == NULL * / {printf ( "Datensatz% d:% d n", zählen, strom-> value) -Strom = strom-> next-Count ++ -}} / * entfernen a Datensatz aus der Liste * / void delete (void) {int r, c-if (erste == NULL) / * für leere Liste überprüfen * / {puts ( "Keine Datensätze entfernen") - Rücklauf-} puts ( "wählen Sie ein Datensatz zu entfernen: ") - show () - printf (" Record: ") -scanf ("% d ", r) -Während (getchar ()! = ' n') / * Überschuss Eingang entfernen * / - c = 1-current = first-while (! c = r) {if (Strom == NULL) / * sicherstellen, dass "r" in Reichweite ist * / {puts ( "Record nicht gefunden") - Rücklauf-} current = strom-> next-c ++ -} if (strom-> vorherige == NULL) / * Sonderfall für erste Datensatz * / {first = strom-> nächsten Erst-> previous = NULL-} else / * Punkt bisherigen Rekord an nächste * / {strom-> Next-> previous = strom-> previous-strom-> Vorige-> next = strom-> Next-} printf ( "Datensatz% d entfernt. n", r) -freie (aktuell) - / * Release Speicher * /} / * Anzeige Zeiger Referenzen in der verknüpften Liste * // * Kopierte meist aus der Show () Funktion * / void Dump (void) {int count = 1-if (erste == NULL) / * diese Liste ist leer * / {puts ( "Nothing to dump") - Rücklauf-} puts ( "Pointer Referenzen") - Strom = first-printf ( "Record # tPrevious tCurrent TWeiter n") - während ( Strom) / * letzte Datensatz == NULL * / {printf ( "Datensatz% d: t% p t% p t% p n", zählen, strom-> vorherigen, aktuellen strom-> next) - Strom = strom-> next-Count ++ -}} / * eine leere Struktur beim Aufbau und das Rück seine Adresse * / struct typische * erstellen (void) {struct typisch * aa = (struct typisch *) malloc (sizeof (struct typisch)) - if (a == null) {puts ( "Irgendeine Art von malloc () Fehler") - Ausgang (1) -} return (a) -}

Menü