Alkioiden 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.
Swipe to start coding
Luo funktio addNewNode, joka lisää uuden solmun yksisuuntaisen linkitetyn listan loppuun.
Funktion sisällä:
- Määrittele muuttuja
struct Node* newNodeja luo uusi solmu käyttämälläcreateNode(value). - Tarkista, onko lista tyhjä testaamalla
*head == NULL. - Jos lista on tyhjä, aseta
newNodeosoittamaan*head:iin. - Jos lista ei ole tyhjä, määrittele
struct Node* currentja aseta se osoittamaan*head. - Kulje listan läpi käyttämällä
while-silmukkaa, kunnescurrent->nextonNULL. - Kun viimeinen solmu on saavutettu, aseta
current->next = newNode.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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?
Mahtavaa!
Completion arvosana parantunut arvoon 4.35
Alkioiden 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.
Swipe to start coding
Luo funktio addNewNode, joka lisää uuden solmun yksisuuntaisen linkitetyn listan loppuun.
Funktion sisällä:
- Määrittele muuttuja
struct Node* newNodeja luo uusi solmu käyttämälläcreateNode(value). - Tarkista, onko lista tyhjä testaamalla
*head == NULL. - Jos lista on tyhjä, aseta
newNodeosoittamaan*head:iin. - Jos lista ei ole tyhjä, määrittele
struct Node* currentja aseta se osoittamaan*head. - Kulje listan läpi käyttämällä
while-silmukkaa, kunnescurrent->nextonNULL. - Kun viimeinen solmu on saavutettu, aseta
current->next = newNode.
Ratkaisu
Kiitos palautteestasi!
single