Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Linkitetyn Listan Läpikäynti ja Näyttäminen | Tietorakenteiden Toteuttaminen
C-Rakenteiden Hallinta

bookLinkitetyn Listan Läpikäynti ja Näyttäminen

Kun olemme oppineet luomaan ja yhdistämään solmuja, meidän täytyy tarkistaa, että tällainen lista toimii oikein!

Tätä varten kirjoitetaan yksinkertainen funktio, joka näyttää koko listan.

Funktio ottaa vastaan osoittimen muistialueeseen, jossa listan pään (ensimmäisen) solmun tiedot sijaitsevat.

void printList(struct Node* head) {}

Tämän jälkeen luodaan väliaikainen current-solmu, jonka avulla käydään koko lista läpi. current-solmun sisältö vastaa nykyisen listasolmun sisältöä.

struct Node* current = head;

Listan läpikäyntiin käytetään while(){} -silmukkaa tarvittavalla ehdolla, eli kunnes löytyy solmu, jonka next-kenttä on NULL.

Note
Huomio

temp (väliaikainen) solmu toimii puskurisolmuna. Sitä tarvitaan väliaikaiseen tallentamiseen (ja poistamiseen) nykyisen solmun sisällöstä. Jos tyhjennämme nykyisen solmun heti, menetämme yhteyden seuraavaan solmuun, mikä tarkoittaa, että pääsy listaan menetetään.

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

Silmukan sisällä näytetään nykyisen solmun data-kentän sisältö ja muutetaan next-kenttää siirtyäksemme seuraavaan solmuun.

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

Heti kun solmu löytyy, jonka next-kenttä on NULL, silmukka lopettaa solmujen sisällön näyttämisen ja funktio päättyy.

Tehtävä

Swipe to start coding

Toteuta yksinkertainen yksisuuntainen linkitetty lista dynaamisella muistinvarauksella. Tehtävänä on täydentää funktiot printList ja freeList.

  1. Toteuta funktio printList yhden parametrin struct Node* head avulla.

    • Sisällä funktiossa printList, julista muuttuja current ja alustaa se arvoon head.
    • Käytä while-silmukkaa, kunnes current on NULL.
    • Jokaisessa silmukan kierroksessa tulosta current-solmun data-kenttä ja siirrä current seuraavaan solmuun.
    • Silmukan jälkeen tulosta rivinvaihto.
  2. Sisällä funktiossa freeList, julista muuttuja current ja alustaa se arvoon head.

    • Käytä while-silmukkaa, kun current ei ole NULL.
    • Silmukan sisällä tallenna current muuttujaan temp.
    • Siirrä current seuraavaan solmuun.
    • Vapauta muisti temp.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 4
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

close

bookLinkitetyn Listan Läpikäynti ja Näyttäminen

Pyyhkäise näyttääksesi valikon

Kun olemme oppineet luomaan ja yhdistämään solmuja, meidän täytyy tarkistaa, että tällainen lista toimii oikein!

Tätä varten kirjoitetaan yksinkertainen funktio, joka näyttää koko listan.

Funktio ottaa vastaan osoittimen muistialueeseen, jossa listan pään (ensimmäisen) solmun tiedot sijaitsevat.

void printList(struct Node* head) {}

Tämän jälkeen luodaan väliaikainen current-solmu, jonka avulla käydään koko lista läpi. current-solmun sisältö vastaa nykyisen listasolmun sisältöä.

struct Node* current = head;

Listan läpikäyntiin käytetään while(){} -silmukkaa tarvittavalla ehdolla, eli kunnes löytyy solmu, jonka next-kenttä on NULL.

Note
Huomio

temp (väliaikainen) solmu toimii puskurisolmuna. Sitä tarvitaan väliaikaiseen tallentamiseen (ja poistamiseen) nykyisen solmun sisällöstä. Jos tyhjennämme nykyisen solmun heti, menetämme yhteyden seuraavaan solmuun, mikä tarkoittaa, että pääsy listaan menetetään.

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

Silmukan sisällä näytetään nykyisen solmun data-kentän sisältö ja muutetaan next-kenttää siirtyäksemme seuraavaan solmuun.

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

Heti kun solmu löytyy, jonka next-kenttä on NULL, silmukka lopettaa solmujen sisällön näyttämisen ja funktio päättyy.

Tehtävä

Swipe to start coding

Toteuta yksinkertainen yksisuuntainen linkitetty lista dynaamisella muistinvarauksella. Tehtävänä on täydentää funktiot printList ja freeList.

  1. Toteuta funktio printList yhden parametrin struct Node* head avulla.

    • Sisällä funktiossa printList, julista muuttuja current ja alustaa se arvoon head.
    • Käytä while-silmukkaa, kunnes current on NULL.
    • Jokaisessa silmukan kierroksessa tulosta current-solmun data-kenttä ja siirrä current seuraavaan solmuun.
    • Silmukan jälkeen tulosta rivinvaihto.
  2. Sisällä funktiossa freeList, julista muuttuja current ja alustaa se arvoon head.

    • Käytä while-silmukkaa, kun current ei ole NULL.
    • Silmukan sisällä tallenna current muuttujaan temp.
    • Siirrä current seuraavaan solmuun.
    • Vapauta muisti temp.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 4
single

single

some-alt