logo

Taulukko vs linkitetty luettelo

Array ja Linkitetty lista ovat kaksi tapaa järjestää tiedot muistissa. Ennen kuin ymmärrät erot Array ja Linkitetty lista , katsomme ensin joukossa ja linkitetty lista .

jousenrakentaja

Mikä on array?

Tietorakenne, joka sisältää samantyyppiset elementit. Tietorakenne on tapa järjestää data; taulukko on tietorakenne, koska se järjestää tiedot peräkkäin. Joukko on iso muistipala, jossa muisti on jaettu pieniin-pieniin lohkoihin ja jokaiseen lohkoon voidaan tallentaa jonkin verran arvoa.

Oletetaan, että olemme luoneet taulukon, joka koostuu 10 arvosta, jolloin jokainen lohko tallentaa kokonaislukutyypin arvon. Jos yritämme tallentaa arvon erityyppiseen taulukkoon, se ei ole oikea taulukko ja aiheuttaa käännösaikavirheen.

Taulukkoilmoitus

Taulukko voidaan ilmoittaa seuraavasti:

 data_type name of the array[no of elements] 

Määrittääksesi taulukon, meidän on ensin määritettävä taulukon tyyppi ja sitten taulukon nimi. Hakasulkeiden sisällä meidän on määritettävä elementtien lukumäärä, jonka taulukon tulisi sisältää.

Ymmärretään esimerkin kautta.

 int a[5]; 

Yllä olevassa tapauksessa olemme ilmoittaneet 5 elementin taulukon, jossa on ' a 'n nimi kokonaisluku tietotyyppi.

Mikä on linkitetty lista?

Linkitetty luettelo on kokoelma satunnaisesti tallennettuja solmuja. Jokainen solmu koostuu kahdesta kentästä, ts. tiedot ja linkki . Tässä data on kyseiseen solmuun tallennettu arvo, ja linkki on osoitin, joka sisältää seuraavan solmun osoitteen.

Erot taulukon ja linkitetyn luettelon välillä

Taulukko vs linkitetty luettelo

Emme voi sanoa, mikä tietorakenne on parempi, eli taulukko vai linkitetty lista . Voi olla mahdollista, että yksi tietorakenne sopii paremmin yhteen vaatimuksiin, kun taas toinen tietorakenne on parempi toiselle vaatimukselle. On olemassa erilaisia ​​tekijöitä, kuten tietorakenteelle usein suoritettavia operaatioita tai datan kokoa, ja muita tekijöitä, joiden perusteella tietorakenne valitaan. Nyt näemme joitain eroja taulukon ja linkitetyn luettelon välillä joidenkin parametrien perusteella.

1. Elementin käyttökustannukset

Jos kyseessä on taulukko, taulukon koosta riippumatta taulukko vie vakioajan päästäkseen elementtiin. Taulukossa elementit tallennetaan vierekkäin, joten jos tiedämme elementin kantaosoitteen, saamme helposti minkä tahansa taulukon elementin osoitteen. Meidän on suoritettava yksinkertainen laskutoimitus saadaksemme minkä tahansa taulukon elementin osoitteen. Joten taulukon elementin käyttäminen on O(1) ajan monimutkaisuuden kannalta.

Taulukko vs linkitetty luettelo

Linkitetyssä luettelossa elementtejä ei tallenneta vierekkäin. Se koostuu useista lohkoista, ja jokainen lohko on esitetty solmuna. Jokaisessa solmussa on kaksi kenttää, eli yksi on tietokenttiä varten ja toinen tallentaa seuraavan solmun osoitteen. Löytääksemme minkä tahansa solmun linkitetystä luettelosta, meidän on ensin määritettävä ensimmäinen solmu, joka tunnetaan pääsolmuna. Jos meidän on löydettävä luettelosta toinen solmu, meidän on kuljettava ensimmäisestä solmusta, ja pahimmassa tapauksessa viimeisen solmun löytämiseksi kuljemme kaikkien solmujen läpi. Keskimääräinen tapaus elementtiin pääsylle on O(n).

Päättelemme, että taulukon elementin käyttökustannukset ovat alhaisemmat kuin linkitetyn luettelon. Siksi, jos meillä on vaatimuksia elementtien käyttämiselle, matriisi on parempi valinta.

mitä on klusterointi

2. Elementin lisäämisen kustannukset

Lisäyksessä voi olla kolme skenaariota:

    Elementin lisääminen alkuun:Jos haluat lisätä uuden elementin alkuun, meidän on ensin siirrettävä elementtiä oikealle luodaksesi välilyönnin ensimmäiseen kohtaan. Joten aika monimutkaisuus on verrannollinen luettelon kokoon. Jos n on taulukon koko, aikamonimutkaisuus olisi O(n).
Taulukko vs linkitetty luettelo

Jos kyseessä on linkitetty luettelo, lisäämällä elementin linkitetyn luettelon alkuun luomme uuden solmun, ja ensimmäisen solmun osoite lisätään uuteen solmuun. Tällä tavalla uudesta solmusta tulee ensimmäinen solmu. Joten aika monimutkaisuus ei ole verrannollinen luettelon kokoon. Aikamonimutkaisuus olisi vakio, eli O(1).

Taulukko vs linkitetty luettelo
    Elementin lisääminen loppuun

Jos taulukko ei ole täynnä, voimme lisätä uuden elementin suoraan indeksin kautta. Tässä tapauksessa aikakompleksisuus olisi vakio, eli O(1). Jos taulukko on täynnä, meidän on ensin kopioitava taulukko toiseen taulukkoon ja lisättävä uusi elementti. Tässä tapauksessa aikamonimutkaisuus olisi O(n).

Jos haluat lisätä elementin linkitetyn luettelon loppuun, meidän on kuljetettava koko luettelo. Jos linkitetty lista koostuu n elementistä, niin aikamonimutkaisuus olisi O(n).

    Elementin lisääminen keskelle

Oletetaan, että haluamme lisätä elementin kohtaan ithtaulukon sijainti; meidän on siirrettävä n/2-elementtejä oikealle. Siksi aika monimutkaisuus on verrannollinen elementtien lukumäärään. Aikamonimutkaisuus olisi O(n) keskimääräiselle tapaukselle.

linuxin pikakuvakkeet
Taulukko vs linkitetty luettelo

Linkitetyn listan tapauksessa meidän on siirryttävä siihen kohtaan, jossa meidän on lisättävä uusi elementti. Tosin meidän ei tarvitse suorittaa minkäänlaista vaihtoa, vaan meidän on ajauduttava n/2-asentoon. Kuluva aika on verrannollinen n elementtien määrään, ja keskimääräisen tapauksen aikamonimutkaisuus olisi O(n).

Taulukko vs linkitetty luettelo

Tuloksena oleva linkitetty luettelo on:

Taulukko vs linkitetty luettelo
    Helppokäyttöisyys

Taulukon toteuttaminen on helppoa verrattuna linkitettyyn luetteloon. Kun ohjelmaa luodaan linkitetyn luettelon avulla, ohjelma on alttiimpi virheille, kuten segmentointivika tai muistivuoto. Joten paljon huolellisuutta on noudatettava luotaessa ohjelmaa linkitetyssä luettelossa.

    Dynaaminen koko

Linkitetty luettelo on kooltaan dynaaminen, kun taas matriisi on staattinen. Tässä staattinen ei tarkoita, että emme voi päättää kokoa ajon aikana, mutta emme voi muuttaa sitä, kun koko on päätetty.

3. Muistivaatimukset

Kuten taulukon elementit tallentuvat yhteen vierekkäiseen muistilohkoon, taulukko on kiinteän kokoinen. Oletetaan, että meillä on taulukko, jonka koko on 7 ja matriisi koostuu 4 elementistä, niin loput tilasta on käyttämätön. 7 elementin varaama muisti:

Taulukko vs linkitetty luettelo

Muistitila = 7*4 = 28 tavua

Missä 7 on taulukon elementtien lukumäärä ja 4 on kokonaislukutyyppisten tavujen lukumäärä.

Linkitetyn listan tapauksessa käyttämätöntä muistia ei ole, mutta ylimääräinen muisti on osoitinmuuttujien käytössä. Jos data on kokonaislukutyyppiä, niin yhden solmun varaama kokonaismuisti on 8 tavua, eli 4 tavua datalle ja 4 tavua osoitinmuuttujalle. Jos linkitetty luettelo koostuu 4 elementistä, linkitetyn luettelon käyttämä muistitila olisi:

web-ajuri

Muistitila = 8*4 = 32 tavua

Linkitetty luettelo olisi parempi valinta, jos tietoosa on kooltaan suurempi. Oletetaan, että data on 16 tavua. Matriisin käyttämä muistitila olisi 16*7=112 tavua, kun taas linkitetty lista vie 20*4=80, tässä olemme määrittäneet 20 tavua 16 tavuksi tiedon kooksi plus 4 tavua osoitinmuuttujalle. Jos valitsemme suuremman datakoon, linkitetty luettelo kuluttaisi vähemmän muistia; muuten se riippuu tekijöistä, joita käytämme koon määrittämiseen.

Tarkastellaan eroja taulukon ja linkitetyn luettelon välillä taulukkomuodossa.

Array Linkitetty lista
Taulukko on kokoelma samantyyppisiä elementtejä. Linkitetty lista on kokoelma objekteja, jotka tunnetaan solmuna ja jossa solmu koostuu kahdesta osasta, eli tiedosta ja osoitteesta.
Matriisielementit tallennetaan viereiseen muistipaikkaan. Linkitetyt luetteloelementit voidaan tallentaa mihin tahansa muistiin tai tallentaa satunnaisesti.
Array toimii staattisen muistin kanssa. Tässä staattinen muisti tarkoittaa, että muistin koko on kiinteä eikä sitä voi muuttaa ajon aikana. Linkitetty luettelo toimii dynaamisen muistin kanssa. Tässä dynaaminen muisti tarkoittaa, että muistin kokoa voidaan muuttaa ajon aikana tarpeidemme mukaan.
Taulukon elementit ovat toisistaan ​​riippumattomia. Linkitetyt luetteloelementit ovat riippuvaisia ​​toisistaan. Koska jokainen solmu sisältää seuraavan solmun osoitteen, joten päästäksemme seuraavaan solmuun, meidän on käytettävä sen edellistä solmua.
Taulukko vie enemmän aikaa suoritettaessa mitä tahansa toimintoa, kuten lisäystä, poistamista jne. Linkitetty luettelo vie vähemmän aikaa suoritettaessa mitä tahansa toimintoa, kuten lisäämistä, poistamista jne.
Pääsy mihin tahansa taulukon elementtiin on nopeampaa, koska taulukon elementtiä voidaan käyttää suoraan indeksin kautta. Linkitetyn luettelon elementin käyttö on hitaampaa, koska se alkaa kulkea linkitetyn luettelon ensimmäisestä elementistä.
Jos kyseessä on taulukko, muisti varataan käännöshetkellä. Jos kyseessä on linkitetty luettelo, muisti varataan ajon aikana.
Muistin käyttö on tehotonta taulukossa. Jos esimerkiksi taulukon koko on 6 ja taulukko koostuu vain 3 elementistä, loput tilasta jää käyttämättä. Muistin käyttö on tehokasta linkitetyn listan tapauksessa, koska muistia voidaan varata tai vapauttaa ajon aikana vaatimuksemme mukaan.