GeeksforGeeks
Arraytit tallentavat elementit vierekkäisiin muistipaikkoihin, mikä johtaa helposti laskettavissa oleviin osoitteisiin tallennetuille elementeille, ja tämä mahdollistaa nopeamman pääsyn elementtiin tietyllä indeksillä. Linkitettyjen listojen tallennusrakenne ei ole yhtä jäykkä, ja elementtejä ei yleensä tallenneta vierekkäisiin paikkoihin, joten ne on tallennettava lisätunnisteilla, jotka antavat viittauksen seuraavaan elementtiin. Tämä ero tietojen tallennusjärjestelmässä ratkaisee, kumpi tietorakenne soveltuu paremmin tiettyyn tilanteeseen.
Matriisin tallennussuunnitelma
Linkitetyn listan tallennussuunnitelma
Merkittävimmät erot on lueteltu alla:
- Koko: Koska dataa voidaan tallentaa vain vierekkäisiin muistilohkoihin joukossa, sen kokoa ei voida muuttaa ajonaikana, koska on olemassa vaara, että se ylikirjoitetaan muun datan päälle. Linkitetyssä listassa jokainen solmu osoittaa kuitenkin seuraavaan solmuun siten, että dataa voi olla hajallaan olevissa (ei-yhtenäisissä) osoitteissa; tämä mahdollistaa dynaamisen koon, joka voi muuttua ajonaikana.
- Muistin varaus:
- Muistin tehokkuus: Linkitetyt listat käyttävät samaa elementtimäärää varten enemmän muistia, koska datan mukana tallennetaan myös viittaus seuraavaan solmuun. Linkitettyjen listojen koon joustavuus voi kuitenkin saada ne käyttämään kaiken kaikkiaan vähemmän muistia; tämä on hyödyllistä, kun koosta ei ole varmuutta tai dataelementtien koossa on suuria vaihteluita; kokoa koskevaa ylärajaa vastaava muisti on varattava (vaikka sitä ei käytettäisikään kokonaan), kun käytetään matriiseja, kun taas linkitetyt listat voivat kasvattaa kokoaan vaiheittain suhteessa datan määrään.
- Suoritusaika: Sen sijaan linkitetyn listan tapauksessa kaikki edelliset elementit on käytävä läpi, jotta päästään mihin tahansa elementtiin. Myös parempi välimuistipaikkatieto voi parantaa suorituskykyä huomattavasti, kun välimuistia käytetään matriiseissa (yhtenäisen muistin varaamisen ansiosta). Tämän seurauksena jotkin operaatiot (kuten tietyn elementin muuttaminen) ovat nopeampia matriiseissa, kun taas jotkin muut (kuten elementin lisääminen tai poistaminen datasta) ovat nopeampia linkitetyissä listoissa.
Seuraavat seikat puoltavat linkitettyjä listoja.
(1) Matriisien koko on kiinteä: Meidän on siis tiedettävä elementtien lukumäärän yläraja etukäteen. Lisäksi yleensä varattu muisti on käytöstä riippumatta yhtä suuri kuin yläraja, ja käytännön käytössä yläraja saavutetaan harvoin.
(2) Uuden elementin lisääminen elementtiryhmään on kallista, koska uusille elementeille on luotava tilaa ja tilan luomiseksi olemassa olevia elementtejä on siirrettävä.
Esitettäköön esimerkiksi, että ylläpidämme lajiteltua listaa tunnuksista array id:ssä.
id = .
Ja jos haluamme lisätä uuden ID:n 1005, niin säilyttääksemme lajitellun järjestyksen meidän on siirrettävä kaikki 1000:n jälkeiset elementit (pois lukien 1000).
Poistaminen on myös kallista matriisien kanssa, kunnes ellei käytetä joitain erikoistekniikoita. Jos esimerkiksi poistamme id:n 1010, kaikki 1010:n jälkeinen on siirrettävä.
Linkitetty lista tarjoaa siis seuraavat kaksi etua verrattuna arrayihin
1) Dynaaminen koko
2) Helppo lisätä/poistaa
Linkitetyillä listoilla on seuraavat haitat:
1) Satunnaiskäyttö ei ole sallittua. Elementtejä on käytettävä peräkkäin ensimmäisestä solmusta alkaen. Emme siis voi tehdä binäärihakua linkitetyillä listoilla.
2) Jokaisen listan elementin kohdalla tarvitaan ylimääräistä muistitilaa osoitinta varten.
3) Arraylla on parempi välimuistin paikallisuus, joka voi tehdä melko suuren eron suorituskykyyn.