Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Alkioiden Lisääminen | Tietorakenteiden Toteuttaminen
C-Rakenteiden Hallinta

bookAlkioiden Lisääminen

Jotta yksinkertaisesta linkitetystä listasta olisi hyötyä, siihen täytyy lisätä solmuja. Toteutat logiikan solmujen lisäämiseksi listaan. Luot uusia solmuja, yhdistät ne ja liität ne niin, että lista kasvaa dynaamisesti elementtejä lisättäessä.

Tämä käytännön lähestymistapa auttaa ymmärtämään tarkalleen, mitä kulissien takana tapahtuu.

Solmun lisäämisen toteutus

Kirjoitetaan yksinkertainen funktio solmun luomiseksi. Tämän funktion tulee:

  • Ottaa argumenttina int-tyyppinen luku, joka tallennetaan solmun data-kenttään;
  • Luoda osoitin dynaamisesti varattuun muistialueeseen (ottaen huomioon solmun koko);
  • Tarkistaa muistivarauksen onnistuminen solmulle;
  • Asettaa vaadittu arvo (funktion argumentti) data-kenttään;
  • Seuraava-osoittimen tulee olla NULL, koska funktio luo vain yhden solmun;
  • Funktion tulee palauttaa osoitin muistialueeseen, johon arvo on tallennettu.

AddNewNode()-funktio ottaa osoittimen osoittimeen, koska se voi muuttaa listan ensimmäisen (head) solmun osoittimen arvoa sekä uuden solmun tallennettavaa arvoa:

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

Jos lista on tyhjä (*head == NULL), päivitetään yksinkertaisesti listan pään (*head) osoitin osoittamaan uuteen solmuun (newNode), jolloin newNode:sta tulee ensimmäinen solmu (pääsolmu). Jos lista ei ole tyhjä, käytetään silmukkaa viimeisen solmun etsimiseen.

Nykyinen solmu toimii välimuistisolmuna, jonka avulla voidaan käydä listaa läpi ja löytää solmu, jonka seuraava-osoitin osoittaa tyhjään (*next == NULL).

struct Node* current = *head;

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

Lopuksi sinun täytyy tehdä uudesta solmusta newNode viimeinen solmu, eli current->next tulee olla yhtä kuin newNode. Nyt newNode on listan viimeinen solmu.

Tehtävänäsi on selvittää ja lisätä funktio, joka lisää uusia solmuja olemassa oleviin solmuihin.

Tehtävä

Swipe to start coding

Luo funktio addNewNode, joka lisää uuden solmun yksisuuntaisen linkitetyn listan loppuun.

Funktion sisällä:

  1. Määrittele muuttuja struct Node* newNode ja luo uusi solmu käyttämällä createNode(value).
  2. Tarkista, onko lista tyhjä testaamalla *head == NULL.
  3. Jos lista on tyhjä, aseta newNode osoittamaan *head:iin.
  4. Jos lista ei ole tyhjä, määrittele struct Node* current ja aseta se osoittamaan *head.
  5. Kulje listan läpi käyttämällä while-silmukkaa, kunnes current->next on NULL.
  6. Kun viimeinen solmu on saavutettu, aseta current->next = newNode.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 3
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

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

bookAlkioiden Lisääminen

Pyyhkäise näyttääksesi valikon

Jotta yksinkertaisesta linkitetystä listasta olisi hyötyä, siihen täytyy lisätä solmuja. Toteutat logiikan solmujen lisäämiseksi listaan. Luot uusia solmuja, yhdistät ne ja liität ne niin, että lista kasvaa dynaamisesti elementtejä lisättäessä.

Tämä käytännön lähestymistapa auttaa ymmärtämään tarkalleen, mitä kulissien takana tapahtuu.

Solmun lisäämisen toteutus

Kirjoitetaan yksinkertainen funktio solmun luomiseksi. Tämän funktion tulee:

  • Ottaa argumenttina int-tyyppinen luku, joka tallennetaan solmun data-kenttään;
  • Luoda osoitin dynaamisesti varattuun muistialueeseen (ottaen huomioon solmun koko);
  • Tarkistaa muistivarauksen onnistuminen solmulle;
  • Asettaa vaadittu arvo (funktion argumentti) data-kenttään;
  • Seuraava-osoittimen tulee olla NULL, koska funktio luo vain yhden solmun;
  • Funktion tulee palauttaa osoitin muistialueeseen, johon arvo on tallennettu.

AddNewNode()-funktio ottaa osoittimen osoittimeen, koska se voi muuttaa listan ensimmäisen (head) solmun osoittimen arvoa sekä uuden solmun tallennettavaa arvoa:

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

Jos lista on tyhjä (*head == NULL), päivitetään yksinkertaisesti listan pään (*head) osoitin osoittamaan uuteen solmuun (newNode), jolloin newNode:sta tulee ensimmäinen solmu (pääsolmu). Jos lista ei ole tyhjä, käytetään silmukkaa viimeisen solmun etsimiseen.

Nykyinen solmu toimii välimuistisolmuna, jonka avulla voidaan käydä listaa läpi ja löytää solmu, jonka seuraava-osoitin osoittaa tyhjään (*next == NULL).

struct Node* current = *head;

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

Lopuksi sinun täytyy tehdä uudesta solmusta newNode viimeinen solmu, eli current->next tulee olla yhtä kuin newNode. Nyt newNode on listan viimeinen solmu.

Tehtävänäsi on selvittää ja lisätä funktio, joka lisää uusia solmuja olemassa oleviin solmuihin.

Tehtävä

Swipe to start coding

Luo funktio addNewNode, joka lisää uuden solmun yksisuuntaisen linkitetyn listan loppuun.

Funktion sisällä:

  1. Määrittele muuttuja struct Node* newNode ja luo uusi solmu käyttämällä createNode(value).
  2. Tarkista, onko lista tyhjä testaamalla *head == NULL.
  3. Jos lista on tyhjä, aseta newNode osoittamaan *head:iin.
  4. Jos lista ei ole tyhjä, määrittele struct Node* current ja aseta se osoittamaan *head.
  5. Kulje listan läpi käyttämällä while-silmukkaa, kunnes current->next on NULL.
  6. Kun viimeinen solmu on saavutettu, aseta current->next = newNode.

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 3
single

single

some-alt