En länkad lista är en grundläggande dynamisk datastruktur inom datavetenskap, bestående av noder som innehåller data och länkar ("länkar") till nästa och/eller föregående nod i listan. [1] Den grundläggande fördelen gentemot en array är strukturell flexibilitet: ordningen för elementen i en länkad lista kanske inte sammanfaller med ordningen för dataelementen i datorns minne [2] , och ordningen för genomgång av listan är alltid uttryckligen anges av dess interna länkar.
En linjär enkelriktad lista är en datastruktur som består av element av samma typ, länkade sekventiellt genom pekare. Varje element i listan har en pekare till nästa element. Det sista elementet i listan pekar på NULL . Elementet som inte pekas på är det första (huvud)elementet i listan. Här pekar länken vid varje nod till nästa nod i listan. I en enkellänkad lista kan du bara flytta mot slutet av listan. Det är omöjligt att ta reda på adressen till det föregående elementet baserat på innehållet i den aktuella noden.
Inom datavetenskap definieras en linjär lista vanligtvis som en abstrakt datatyp (ADT) som formaliserar begreppet en ordnad insamling av data . I praktiken implementeras linjära listor vanligtvis med hjälp av arrayer och länkade listor. Ibland används termen "lista" också informellt som en synonym för "länkad lista". Till exempel kan en otypad föränderlig lista ADT definieras som en uppsättning konstruktorer och grundläggande operationer:
med en enskild länkad lista:
struct list * l1 = ( struct lista * ) malloc ( sizeof ( struct lista )); l1 -> fält = 1 ; l1 -> nästa = ( struct lista * ) malloc ( sizeof ( struct lista )); l1 -> nästa -> fält = 2 ; l1 -> nästa -> nästa = ( struct lista * ) malloc ( sizeof ( struct lista )); /* etc. */ Dubbellänkad lista (dubbellänkad lista)Här pekar länkarna i varje nod till föregående och nästa nod i listan. Liksom en enkellänkad lista tillåter en dubbellänkad lista endast sekventiell åtkomst till element, men den tillåter också rörelse i båda riktningarna. I den här listan är det lättare att ta bort och ordna om element, eftersom adresserna till de element i listan vars pekare är riktade till elementet som ändras är lättillgängliga.
XOR länkad listaSällan använd.
En slags länkad lista är en ringlista (cyklisk, stängd). Den kan också vara enkellänkad eller dubbellänkad. Det sista elementet i en cirkulär lista innehåller en pekare till den första, och den första (i fallet med en dubbellänkad lista) till den sista.
Som regel implementeras en sådan struktur på basis av en linjär lista. Varje cirkulär lista lagrar dessutom en pekare till det första elementet. Det finns ingen referens till NULL i denna lista.
Det finns också cirkulära listor med ett dedikerat huvudelement för att göra det lättare att gå igenom hela listan.
Nackdelarna med länkade listor beror på deras huvudsakliga egenskap - sekventiell åtkomst till data:
Data struktur | |
---|---|
Listor | |
Träd | |
Räknar | |
Övrig |