Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Genomgång och visning av en länkad lista | Implementering av Datastrukturer
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Behärska C-Strukturer

bookGenomgång och visning av en länkad lista

Efter att vi har lärt oss hur man skapar och kopplar samman noder, behöver vi kontrollera att en sådan lista fungerar korrekt!

För detta skriver vi en enkel funktion som visar hela listan.

Funktionen tar emot en pekare till minnesområdet där huvudet (första noden) i listan lagras.

void printList(struct Node* head) {}

Därefter skapas en temporär nod current, med vilken vi går igenom hela listan. Innehållet i den aktuella noden kommer att vara lika med innehållet i den aktuella listnoden.

struct Node* current = head;

För att iterera genom listan använder vi while(){}-loopen med det nödvändiga villkoret, nämligen tills en nod hittas vars next-fält är NULL.

Note
Notera

temp (temporär) nod fungerar som en buffertnod. Den används för att tillfälligt lagra (och ta bort) innehållet i den aktuella noden. Om vi omedelbart rensar den aktuella noden, förlorar vi kopplingen till nästa nod, vilket innebär att åtkomsten till listan går förlorad.

while (current != NULL) { }
printf("\n");

Inuti loopen visar vi innehållet i data-fältet för den aktuella noden och ändrar next-fältet för att gå vidare till nästa nod.

printf("%d ", current->data);
current = current->next;

Så snart en nod hittas vars next-fält är lika med NULL, kommer loopen att sluta visa innehållet i noderna och funktionen avslutas.

Uppgift

Swipe to start coding

Implementera en enkel enkelriktad länkad lista med dynamisk minnesallokering. Uppgiften är att färdigställa funktionerna printList och freeList.

  1. Implementera en funktion printList med en parameter struct Node* head.

    • Deklarera en variabel current och initiera den till head i printList.
    • Använd en while-loop för att iterera så länge current inte är NULL.
    • Vid varje iteration, skriv ut fältet data för current och flytta current till nästa nod.
    • Efter loopen, skriv ut ett radbrytningstecken för att separera utdata.
  2. I freeList, deklarera en variabel current och initiera den till head.

    • Använd en while-loop för att iterera så länge current inte är NULL.
    • Inuti loopen, lagra current i en temporär variabel temp.
    • Flytta current till nästa nod.
    • Frigör minnet som är allokerat för temp.

Lösning

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 4
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

close

bookGenomgång och visning av en länkad lista

Svep för att visa menyn

Efter att vi har lärt oss hur man skapar och kopplar samman noder, behöver vi kontrollera att en sådan lista fungerar korrekt!

För detta skriver vi en enkel funktion som visar hela listan.

Funktionen tar emot en pekare till minnesområdet där huvudet (första noden) i listan lagras.

void printList(struct Node* head) {}

Därefter skapas en temporär nod current, med vilken vi går igenom hela listan. Innehållet i den aktuella noden kommer att vara lika med innehållet i den aktuella listnoden.

struct Node* current = head;

För att iterera genom listan använder vi while(){}-loopen med det nödvändiga villkoret, nämligen tills en nod hittas vars next-fält är NULL.

Note
Notera

temp (temporär) nod fungerar som en buffertnod. Den används för att tillfälligt lagra (och ta bort) innehållet i den aktuella noden. Om vi omedelbart rensar den aktuella noden, förlorar vi kopplingen till nästa nod, vilket innebär att åtkomsten till listan går förlorad.

while (current != NULL) { }
printf("\n");

Inuti loopen visar vi innehållet i data-fältet för den aktuella noden och ändrar next-fältet för att gå vidare till nästa nod.

printf("%d ", current->data);
current = current->next;

Så snart en nod hittas vars next-fält är lika med NULL, kommer loopen att sluta visa innehållet i noderna och funktionen avslutas.

Uppgift

Swipe to start coding

Implementera en enkel enkelriktad länkad lista med dynamisk minnesallokering. Uppgiften är att färdigställa funktionerna printList och freeList.

  1. Implementera en funktion printList med en parameter struct Node* head.

    • Deklarera en variabel current och initiera den till head i printList.
    • Använd en while-loop för att iterera så länge current inte är NULL.
    • Vid varje iteration, skriv ut fältet data för current och flytta current till nästa nod.
    • Efter loopen, skriv ut ett radbrytningstecken för att separera utdata.
  2. I freeList, deklarera en variabel current och initiera den till head.

    • Använd en while-loop för att iterera så länge current inte är NULL.
    • Inuti loopen, lagra current i en temporär variabel temp.
    • Flytta current till nästa nod.
    • Frigör minnet som är allokerat för temp.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 4
single

single

some-alt