Forskjellen mellom Arrays og Linked Lists

Arrays vs Linked Lists

Arrays er den mest brukte datastrukturen for å lagre samling av elementer. De fleste programmeringsspråk gir metoder for enkelt å deklarere arrayer og tilgangselementer i arrays. Tilknyttet liste, mer presist, ensidig koblet liste, er også en datastruktur som kan brukes til å lagre samling av elementer. Den består av en sekvens av noder og hver knute har en referanse til neste knutepunkt i sekvensen.

Vist i figur 1, er et stykke kode som vanligvis brukes til å deklarere og tilordne verdier til en matrise. Figur 2 viser hvordan en matrise vil se ut i minnet.

Over koden definerer en matrise som kan lagre 5 heltall, og de er tilgjengelige ved hjelp av indeksene 0 til 4. En viktig egenskap i en matrise er at hele matrisen er allokert som en enkelt blokk med minne, og hvert element får sin egen plass i matrisen. Når et array er definert, er størrelsen fast. Så hvis du ikke er sikker på størrelsen på arrayet på kompileringstid, må du definere et stort nok array for å være i den sikre siden. Men mesteparten av tiden bruker vi faktisk mindre antall elementer enn vi har tildelt. Så en betydelig mengde minne er faktisk bortkastet. På den annen side dersom programmet "stort nok" ikke er stort nok, vil programmet krasje.

En koblet liste tildeler hukommelsen til elementene separat i sin egen blokk av minne, og den overordnede strukturen oppnås ved å koble disse elementene som lenker i en kjede. Hvert element i en koblet liste har to felt som vist i figur 3. Datafeltet inneholder de faktiske dataene lagret, og det neste feltet inneholder referansen til neste element i kjeden. Det første elementet i den koblede listen er lagret som hodet til den koblede listen.

data neste

Figur 3: Element av en tilknyttet liste

Figur 4 viser en koblet liste med tre elementer. Hvert element lagrer dataene sine og alle elementene unntatt den siste lagrer en referanse til neste element. Sist element har null verdi i neste felt. Ethvert element i listen kan nås ved å starte ved hodet og følge den neste pekeren til du møter det nødvendige elementet.

Selv om arrays og koblede lister er like i den forstand at begge er vant til å lagre samling av elementer, påtar de seg forskjeller på grunn av strategiene de bruker for å tildele minne til elementene. Arrays allokerer minne til alle elementene som en enkelt blokk, og størrelsen på arrayet må bestemmes ved kjøring. Dette ville gjøre arrays ineffektive i situasjoner hvor du ikke kjenner størrelsen på arrayet på kompileringstidspunktet. Siden en koblet liste tildeler minne til elementene separat, ville det være mye effektivt i situasjoner der du ikke kjenner størrelsen på listen på kompileringstidspunktet. Erklæring og tilgang til elementer i en koblet liste vil ikke være rett frem i forhold til hvordan du direkte får tilgang til elementer i en matrise ved hjelp av sine indekser.