Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Elemente Hinzufügen | Implementierung von Datenstrukturen
C-Strukturen Meistern

bookElemente Hinzufügen

Um eine einfach verkettete Liste nützlich zu machen, müssen Knoten hinzugefügt werden. Die Logik zum Einfügen von Knoten in die Liste wird implementiert. Neue Knoten werden erstellt, miteinander verbunden und so integriert, dass die Liste beim Hinzufügen von Elementen dynamisch wächst.

Dieser praxisorientierte Ansatz vermittelt ein genaues Verständnis der Abläufe im Hintergrund.

Implementierung der Knoteneinfügung

Eine einfache Funktion zum Erstellen eines Knotens wird geschrieben. Diese Funktion soll:

  • Als Argument eine Zahl vom Typ int erhalten, die im Datenfeld des Knotens gespeichert wird;
  • Einen Zeiger auf einen dynamisch allozierten Speicherbereich erstellen (unter Berücksichtigung der Knotengröße);
  • Den Erfolg der Speicherzuweisung für den Knoten überprüfen;
  • Den erforderlichen Wert (Funktionsargument) in das Datenfeld eintragen;
  • Der nächste Zeiger muss NULL sein, da die Funktion nur einen Knoten erstellt;
  • Die Funktion muss einen Zeiger auf den Speicherbereich zurückgeben, in dem der Wert gespeichert ist.

Die Funktion AddNewNode() erhält einen Zeiger auf einen Zeiger, da sie den Wert des Zeigers auf den ersten (head) Knoten der Liste sowie den Wert, der im neuen Knoten gespeichert wird, ändern kann:

void AddNewNode(struct Node** head, int value) 
{
	...
}

Wenn die Liste leer ist (*head == NULL), wird der Zeiger auf den Kopf der Liste (*head) einfach so aktualisiert, dass er auf den neuen Knoten (newNode) zeigt; in diesem Fall wird newNode zum ersten Knoten (Kopfknoten). Im Fall einer nicht-leeren Liste wird mit einer Schleife nach dem letzten Knoten gesucht.

Der aktuelle Knoten übernimmt die Rolle eines Pufferknotens; mit seiner Hilfe kann durch die Liste iteriert und ein Knoten gefunden werden, der auf nichts mehr zeigt (*next == NULL).

struct Node* current = *head;

while (current->next != NULL) 
{
    ...
}

Am Ende müssen Sie den neuen Knoten newNode zum letzten Knoten machen, was bedeutet, dass current->next gleich newNode sein muss. Nun ist newNode der letzte Knoten in der Liste.

Als Aufgabe sollen Sie eine Funktion entwickeln und hinzufügen, die neue Knoten zu bestehenden Knoten hinzufügt.

Aufgabe

Swipe to start coding

Eine Funktion addNewNode erstellen, die einen neuen Knoten am Ende einer einfach verketteten Liste hinzufügt.

Innerhalb der Funktion:

  1. Eine Variable struct Node* newNode deklarieren und einen neuen Knoten mit createNode(value) erzeugen.
  2. Prüfen, ob die Liste leer ist, indem *head == NULL getestet wird.
  3. Falls die Liste leer ist, newNode an *head zuweisen.
  4. Falls die Liste nicht leer ist, struct Node* current deklarieren und auf *head setzen.
  5. Die Liste mit einer while-Schleife durchlaufen, bis current->next gleich NULL ist.
  6. Nach Erreichen des letzten Knotens current->next = newNode setzen.

Lösung

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 3
single

single

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

Can you show me an example of how to use the AddNewNode function?

What should the Node struct look like for this implementation?

Can you explain how memory management works when adding new nodes?

close

bookElemente Hinzufügen

Swipe um das Menü anzuzeigen

Um eine einfach verkettete Liste nützlich zu machen, müssen Knoten hinzugefügt werden. Die Logik zum Einfügen von Knoten in die Liste wird implementiert. Neue Knoten werden erstellt, miteinander verbunden und so integriert, dass die Liste beim Hinzufügen von Elementen dynamisch wächst.

Dieser praxisorientierte Ansatz vermittelt ein genaues Verständnis der Abläufe im Hintergrund.

Implementierung der Knoteneinfügung

Eine einfache Funktion zum Erstellen eines Knotens wird geschrieben. Diese Funktion soll:

  • Als Argument eine Zahl vom Typ int erhalten, die im Datenfeld des Knotens gespeichert wird;
  • Einen Zeiger auf einen dynamisch allozierten Speicherbereich erstellen (unter Berücksichtigung der Knotengröße);
  • Den Erfolg der Speicherzuweisung für den Knoten überprüfen;
  • Den erforderlichen Wert (Funktionsargument) in das Datenfeld eintragen;
  • Der nächste Zeiger muss NULL sein, da die Funktion nur einen Knoten erstellt;
  • Die Funktion muss einen Zeiger auf den Speicherbereich zurückgeben, in dem der Wert gespeichert ist.

Die Funktion AddNewNode() erhält einen Zeiger auf einen Zeiger, da sie den Wert des Zeigers auf den ersten (head) Knoten der Liste sowie den Wert, der im neuen Knoten gespeichert wird, ändern kann:

void AddNewNode(struct Node** head, int value) 
{
	...
}

Wenn die Liste leer ist (*head == NULL), wird der Zeiger auf den Kopf der Liste (*head) einfach so aktualisiert, dass er auf den neuen Knoten (newNode) zeigt; in diesem Fall wird newNode zum ersten Knoten (Kopfknoten). Im Fall einer nicht-leeren Liste wird mit einer Schleife nach dem letzten Knoten gesucht.

Der aktuelle Knoten übernimmt die Rolle eines Pufferknotens; mit seiner Hilfe kann durch die Liste iteriert und ein Knoten gefunden werden, der auf nichts mehr zeigt (*next == NULL).

struct Node* current = *head;

while (current->next != NULL) 
{
    ...
}

Am Ende müssen Sie den neuen Knoten newNode zum letzten Knoten machen, was bedeutet, dass current->next gleich newNode sein muss. Nun ist newNode der letzte Knoten in der Liste.

Als Aufgabe sollen Sie eine Funktion entwickeln und hinzufügen, die neue Knoten zu bestehenden Knoten hinzufügt.

Aufgabe

Swipe to start coding

Eine Funktion addNewNode erstellen, die einen neuen Knoten am Ende einer einfach verketteten Liste hinzufügt.

Innerhalb der Funktion:

  1. Eine Variable struct Node* newNode deklarieren und einen neuen Knoten mit createNode(value) erzeugen.
  2. Prüfen, ob die Liste leer ist, indem *head == NULL getestet wird.
  3. Falls die Liste leer ist, newNode an *head zuweisen.
  4. Falls die Liste nicht leer ist, struct Node* current deklarieren und auf *head setzen.
  5. Die Liste mit einer while-Schleife durchlaufen, bis current->next gleich NULL ist.
  6. Nach Erreichen des letzten Knotens current->next = newNode setzen.

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 3
single

single

some-alt