int main
{
struct listNode
{
int databank ;
strut listNode * vorig
;
listNode
strut * volgende ;
} ;
return 0 ;
}
de " struct listNode " blok van code maakt een sjabloon voor de items die de lijst zal bevolken . Dit sjabloon definieert een listNode als die drie elementen : een data-item ( een integer ) en verwijzingen naar de vorige en volgende items in de lijst . Een pointer is een variabele die een geheugen -adres bezit . Pointers worden gebruikt om te verwijzen naar andere data structuren in diepe geheugen en dynamisch geheugen toewijzen tijdens de uitvoering van de code . Kopen van 2
verklaren de variabelen die de lijst structuur zal organiseren . Plaats dit voorbeeld code in het tekstbestand :
int size
;
listNode
* hoofd ;
listNode * staart
;
staart
= hoofd ; < br >
kop = staart ;
Deze twee pointers zijn het begin en het einde van de lijst , respectievelijk . Met deze aanwijzers , de programmeur weet waar het begin van de lijst en waarbij het einde door eenvoudig als de huidige node de "kop " en "staart" pointer . Beiden verwijzen naar elkaar in het geval van een lege lijst .
3
Maak een eenvoudig algoritme om items toevoegen uit de gelinkte lijst . Volg dit voorbeeld code :
void append
( int num ) op
struct listNode * tracer = head { ;
struct listNode * newNode = ( struct listNode * ) malloc ( sizeof ( struct listNode ) ) ;
newNode - > data = num
;
als ( hoofd == NULL ) {
hoofd
= newNode ;
tail = newNode ;
newNode - > prev = head ;
newNode - > volgende = staart
;
}
else {
terwijl ( tracer - > volgende = staart ! ) op Twitter
{ tracer = tracer - > volgende ; }
newNode - > prev = tracer
;
newNode - > volgende = staart ;
tracer - > volgende = knooppunt
;
tail
= knooppunt ;
}
grootte
+ + ;
}
Deze code voegt een knoop aan het einde van de lijst . Het begint door een pointer naar het begin van de lijst ( " tracer " ) . Dan , het creëert een pointer naar een dynamisch toegewezen blok van het geheugen gereserveerd voor een nieuw gecreëerde listNode ( newNode ) en stelt de gegevens van dat knooppunt aan de integer " num " . Indien het hoofd punten op NULL ( wat betekent dat de lijst leeg is, omdat het hoofd wijst niets) , dan is de code voegt het knooppunt het begin van de lijst . Anders wordt de lus "terwijl" doorloopt de knooppunten in de lijst tot aan de laatste knoop . Wanneer " tracer " wijst naar het laatste element van de lijst , de code voegt het knooppunt . De laatste opdracht draagt bij aan de " grootte" integer , het bijhouden van de elementen in de lijst
4
Maak een algoritme te verwijderen en punt uit het einde van de lijst : .
leegte removeNode ( ) {
if ( tail = head ! ) {
struct listNode * end = staart ;
tail
= tail - > vorige ;
gratis ( eind ) ;
grootte
- ;
}
}
Deze code maakt een pointer ( " end " ) om de laatste element van de lijst ( hetzelfde element "staart" wijst op ) . Vervolgens wordt de staart ingesteld om onmiddellijk te wijzen op het element voordat het laatste element ( het knooppunt wees op de " vorige " pointer van het laatste element ) . Tenslotte wordt het geheugen gebruikt door laatste knoop , door " end " genoemd , vrijgemaakt voor verder gebruik .