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

In der C-Programmierung, wenn Sie eine zweite Struktur hinzufügen möchten Sie bereits erstellt, Code haben, erstellen Sie eine verknüpfte Liste - eine Reihe von Strukturen, die Zeiger zueinander enthalten. Zusammen mit den Basisdaten in einer Struktur enthält die Struktur einen Zeiger, der die Adresse der nächsten Struktur in der Liste enthält.

Mit einigen cleveren Jonglieren von Zeigernamen sowie ein NULL das Ende der Liste zu begrenzen, können Sie auch mit etwas ähnliches auf den Quellcode in eine primitive Linked-List Beispiel enden.

Ein primitiver verketteten Liste BEISPIEL

# include # include # include int main () {struct Lager {char Symbol [5] -int Menge Schwimm-Preis-Strukt Lager * nächste -} - struct Lager * First-Struktur Lager * Strom-Strukt Lager * neu - / * erstellen Sie Struktur im Speicher * / first = (struct Lager *) malloc (sizeof (struct Lager)) - if (erste == null) {puts ( "eine Art von malloc () Fehler") - Ausgang (1) -} / * zuweisen Strukturdaten */current=first-strcpy(current->symbol,"GOOG")-current->quantity=100-current->price=801.19-current->next=NULL-new=(struct Lager *) malloc (sizeof (struct Lager)) - if (neu == null) {puts ( "Another malloc () error")-exit(1)-}current->next=new-current=new-strcpy(current->symbol,"MSFT")-current->quantity=100-current->price=28.77-current->next=NULL-/* Display-Datenbank * / puts ( "Anlage Portfolio")-printf("SymboltSharestPricetValuen")-current=first-printf("%-6st%5dt%.2ft%.2fn",current->symbol,current->quantity,current->price,current->quantity*current->price)-current=current->next-printf("%-6st%5dt%.2ft%.2fn",current->symbol,current->quantity,current->price,current->quantity*current->price)-return(0)-}

Dieser Quellcode ist ziemlich lang, aber es wird lediglich eine zweite Struktur mit der ersten verknüpft. lassen die Länge des Quellcodes nicht einschüchtern.

Zeilen 13 bis 15 deklarieren die Standard drei Struktur Zeiger, die für eine verknüpfte Liste Tanz erforderlich sind. Traditionell sind sie erste, aktuelle und neu benannt. Sie spielen in das vierte Element in der Struktur, in der Nähe, bei Line gefunden 11, die eine Struktur Zeiger ist.

Verwenden Sie typedef keinen neuen Strukturvariablen zu definieren, wenn eine verknüpfte Liste zu erstellen. A Primitive Linked-List Beispiel verwenden typedef nicht, so ist es nicht ein Problem mit dem Code, aber viele C-Programmierer verwenden typedef mit Strukturen. Achtung!

Der Name der Variablen neu, gebraucht in Zeile 15, ist ein reserviertes Wort in C ++, also wenn Sie den Variablennamen als das Wort neu zu new_struct oder anderen etwas zweisprachig, ändern zu wollen.

Wenn die erste Struktur gefüllt ist, weist die Leitung 30 einen NULL-Zeiger auf das nächste Element. Das NULL-Wert Kappen das Ende der verknüpften Liste.

Zeile 32 erzeugt eine Struktur, platziert seine Adresse in der neuen Zeigervariable. Die Adresse wird in der ersten Struktur in Zeile 38 gespeichert, das ist, wie die Position der zweiten Struktur beibehalten wird.

40 Zeilen bis 43 füllen Informationen für den zweiten Zeiger, einen NULL-Wert auf das nächste Element in Zeile 43 zugewiesen wird.

Die Verknüpfung erfolgt wie den Strukturen der Inhalte angezeigt werden. Linie 48 erfasst die Adresse der ersten Struktur. Dann 54 Linie fängt die Adresse der nächsten Struktur innerhalb der ersten Struktur.

Übung 1: Geben Sie den Quellcode von A Primitive Linked-List Beispiel in Ihren Editor. Auch wenn es lang ist, geben Sie es in, weil Sie es müssen, um später erneut bearbeiten (wenn Sie nicht zu, dass von jetzt gewohnt sind). Erstellen und ausführen.

bild0.jpg

Im Gegensatz zu Arrays, Strukturen in einer verknüpften Liste sind nicht nummeriert. Stattdessen wird jede Struktur auf die nächste Struktur in der Liste verknüpft. Solange Sie die Adresse der ersten Struktur kennen, können Sie bis zum Ende durch die Liste arbeiten, die von einem NULL markiert ist.

A Primitive Linked-List Beispiel zeigt einige schlampig Quellcode mit vielen wiederholten Code. Wenn Sie mehrere Aussagen wie diese in Ihrem Code zu sehen, sollten Sie sofort denken # 147-Funktionen # 148.

A BETTER verketteten Liste BEISPIEL

# include # include # include #define PUNKTE 5struct Lager {char Symbol [5] -int Menge Schwimm-Preis-Strukt Lager * nächste -} - struct Lager * First-Struktur Lager * Strom-Strukt Lager * new-Strukt Lager * make_structure (void) -Lücke fill_structure (struct Lager * a, int c) -Lücke show_structure (struct Lager * a) -INT main () {int x-for (x = 0-xnext = new-current = neuen-} fill_structure ( Strom, x + 1) -} strom-> next = NULL - / * Anzeige Datenbank * / puts ( "Investment Portfolio") - printf ( "Symbol tShares tPrice tValue n") - Strom = first-while ( Strom) {show_structure (Strom) -Strom = strom-> Next-} return (0) -} struct Lager * make_structure (void) {struct Lager * aa = (struct Lager *) malloc (sizeof (struct Lager)) - wenn (a == null) {puts ( "Irgendeine Art von malloc () Fehler") - Ausgang (1) -} return (a) -} void fill_structure (struct Lager * a, int c) {printf ( "Item #% d /% d: n ", c, PUNKTE) -printf (" Aktiensymbol: ") -scanf ("% s ", a-> Symbol) -printf (" Anzahl der Aktien: ") -scanf ("% d ", a-> Menge) -printf (" Aktienkurs: ") -scanf ("% f ", a-> Preis) -} void show_structure (struct Lager * a) {printf ("% - 6s t% 5d ​​t% .2f t% .2f n ", a-> Symbol, a-> Menge, a-> Preis, a-> Menge * a-> Preis) -}

Die meisten verkettete Listen werden erstellt, in einer besseren Linked-List Beispiel, wie gezeigt. Der Schlüssel ist, drei Strukturvariablen zu verwenden, in Zeilen 13 bis 15 gezeigt:

  • erste enthält immer die Adresse der ersten Struktur in der Liste. Immer.

  • Strom enthält die Adresse der Struktur auf, mit Daten, oder angezeigt gefüllt gearbeitet.

  • neu ist die Adresse einer neuen Struktur, die durch die malloc () Funktion.

Zeile 7 deklariert die Aktienstruktur als global. Auf diese Weise können sie von den verschiedenen Funktionen zugegriffen werden.

Die for-Schleife zwischen den Linien 25 und 39 schafft neue Strukturen, die Verknüpfung sie zusammen. Die Anfangsstruktur ist speziell, so wird seine Adresse in Leitung 30. Ansonsten wird eine neue Struktur zugeordnet ist, dank der make_structure () -Funktion gespeichert.

In Zeile 35 wird die bisherige Struktur updated- der Wert des Stroms nicht bis Zeile 36 geändert wird, bevor das passiert, wird der Zeiger in der aktuellen Struktur mit der Adresse der nächsten Struktur aktualisiert, neu.

Bei 40 Zeile wird das Ende der verknüpften Liste markiert, indem die neuen Zeiger in der letzten Struktur auf eine NULL zurückgesetzt wird.

Die while-Schleife in Zeile 46 zeigt alle Strukturen in der verknüpften Liste. Der Zustand der Schleife ist der Wert des aktuellen Zeiger. Wenn die NULL auftritt, stoppt die Schleife.

Der Rest des Codes in einer besseren Linked-List Beispiel gezeigt besteht aus Funktionen, die ziemlich selbsterklärend sind.

Übung 2: Kopieren Sie den Code aus einer besseren Linked-List Beispiel in den Editor. Erstellen und ausführen.

Beachten Sie die scanf () Angaben in der fill_structure () Funktion. Denken Sie daran, dass der -> der # 147-peeker # 148- Notation für einen Zeiger. Um die Adresse zu erhalten, müssen Sie die Variable mit einem Präfix in der scanf () Funktion.

Menü