170 likes | 285 Views
911. 112. 1. Linkitetty lista. Joukko alkioita jotka on kytketty toisiinsa linkeillä Listan alkio sisältää talletettavan datan ja linkin seuraavan alkioon Alkion lisääminen listan keskelle on helppoa Alkioihin ei voida viitata indeksin avulla vrt. taulukko
E N D
911 112 1 Linkitetty lista • Joukko alkioita jotka on kytketty toisiinsa linkeillä • Listan alkio sisältää talletettavan datan jalinkin seuraavan alkioon • Alkion lisääminen listan keskelle on helppoa • Alkioihin ei voida viitata indeksin avulla vrt. taulukko • Listan kokoa ei ole ennalta rajoitettu luku seuraava NULL
911 112 1 Joitakin linkitetyn listan operaatioita • Alkion lisääminen listaan • Alkion poistaminen listasta • Listan läpikäynti • Listan pituuden palauttaminen luku seuraava NULL pääosoitin
911 112 1 C-kielinen implementaatio struct alkio { int luku; struct alkio* seuraava; }; luku seuraava NULL pääosoitin
911 112 1 4 Alkion lisääminen listan päähän void lisaa_paahan(struct alkio **paa, int luku) { struct alkio *uusiAlkio = (struct alkio *) malloc(sizeof(struct alkio)); uusiAlkio->luku = luku; uusiAlkio->seuraava = *paa; *paa = uusiAlkio;} luku seuraava NULL *paa uusiAlkio
911 112 1 4 Alkion lisääminen listan päähän void lisaa_paahan(struct alkio **paa, int luku) { struct alkio *uusiAlkio = (struct alkio *) malloc(sizeof(struct alkio)); uusiAlkio->luku = luku; uusiAlkio->seuraava = *paa; *paa = uusiAlkio;} luku seuraava NULL *paa, uusiAlkio
911 112 1 4 Alkion lisääminen listan keskelle void lisaa(struct alkio *edeltaja, int luku) { struct alkio *uusiAlkio = (struct alkio *)malloc(sizeof(struct alkio)); uusiAlkio->luku = luku; uusiAlkio->seuraava = edeltaja->seuraava; edeltaja->seuraava = uusiAlkio; } luku seuraava NULL pääosoitin edeltäjä uusiAlkio
911 112 1 4 Alkion lisääminen listan keskelle void lisaa(struct alkio *edeltaja, int luku) { struct alkio *uusiAlkio = (struct alkio *)malloc(sizeof(struct alkio)); uusiAlkio->luku = luku; uusiAlkio->seuraava = edeltaja->seuraava; edeltaja->seuraava = uusiAlkio; } luku seuraava NULL pääosoitin uusiAlkio
911 112 1 Alkion poistaminen listan alusta void poista(struct alkio **listan_paa){ struct alkio *poistettava; poistettava=*listan_paa; *listan_paa = (*listan_paa)->seuraava; free(poistettava);} luku seuraava NULL *listan_paa, poistettava
911 112 1 Alkion poistaminen listan alusta void poista(struct alkio **listan_paa){ struct alkio *poistettava; poistettava=*listan_paa; *listan_paa = (*listan_paa)->seuraava; free(poistettava);} luku seuraava NULL poistettava *listan_paa
911 112 1 Alkion poistaminen listan keskeltä void poista(struct alkio *edeltaja){ struct alkio *poistettava; poistettava=edeltaja->seuraava; edeltaja->seuraava = poistettava->seuraava; free(poistettava);} luku seuraava NULL pääosoitin, edeltäjä poistettava
911 112 1 Alkion poistaminen listan keskeltä void poista(struct alkio *edeltaja){ struct alkio *poistettava; poistettava=edeltaja->seuraava; edeltaja->seuraava = poistettava->seuraava; free(poistettava);} luku seuraava NULL pääosoitin, edeltäjä poistettava
911 112 1 Listan läpikäynti struct alkio* nykyinen = paa; while (nykyinen != NULL) { /*tee jotain listan alkiolle (nykyinen->luku) */ nykyinen = nykyinen->seuraava; } luku seuraava NULL pääosoitin, nykyinen
911 112 1 Listan läpikäynti struct alkio* nykyinen = paa; while (nykyinen != NULL) { /*tee jotain listan alkiolle (nykyinen->luku) */ nykyinen = nykyinen->seuraava; } luku seuraava NULL pääosoitin nykyinen
911 112 1 Listan läpikäynti struct alkio* nykyinen = paa; while (nykyinen != NULL) { /*tee jotain listan alkiolle (nykyinen->luku) */ nykyinen = nykyinen->seuraava; } luku seuraava NULL pääosoitin nykyinen
Listan pituuden palauttaminen int pituus(const struct alkio* paa) { int laskuri = 0; const struct alkio* nykyinen = paa; while (nykyinen != NULL) { laskuri++; nykyinen = nykyinen->seuraava; } return(laskuri); } for (nykyinen = paa; nykyinen != NULL; nykyinen = nykyinen->seuraava) laskuri++; return(laskuri);
911 112 1 Häntäalkio • Nopeuttaa listan loppuun lisäämistä luku seuraava NULL pääosoitin häntäosoitin
911 112 1 Rengas • Viimeisestä alkiosta osoitin ensimmäiseen alkioon luku seuraava pääosoitin häntäosoitin