Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Vytvorte štruktúru uzla , ktorý bude slúžiť ako dátový typ prepojeného zoznamu . V textovom editore , zadajte nasledujúci kód : Spojené
# include int main { klipart struct listNode { klipart int údaje ; vzpera listNode * predchádzajúce ; vzpery listNode * ďalšie ; } ; return 0 ; } " struct listNode " blok kódu vytvorí šablónu pre položky, ktoré naplní zoznam . Táto šablóna definuje listNode ako obsahujúce tri prvky : položky dát ( integer ) a odkazy na ďalšie a predchádzajúcej položky v zozname. Ukazovateľ je premenná , ktorá je držiteľom adresu v pamäti . Ukazovatele sú používané sa odkazovať na iné dátové štruktúry v hlbokej pamäti a pri spustení kódu dynamicky alokovať pamäť . deklarovať premenné , ktoré sa organizujú štruktúru zoznamu . Vložte tento príklad kódu do textového súboru : int size ; listNode * hlava ; listNode * chvost ; chvost = hlava ; hlava = chvost , Tieto dva ukazovatele sú začiatok a koniec zoznamu , resp . Pomocou týchto ukazovateľov , programátor vie , kde na začiatku zoznamu a kde koniec je jednoducho skontrolovať , či je aktuálny uzol je " hlava " alebo ukazovateľ " chvost " . Obaja odkazujú späť na seba v prípade prázdneho zoznamu . Vytvoriť jednoduchý algoritmus pre pridanie položky z prepojeného zoznamu . Nasledujte tento príklad kódu : void pridávací ( int num ) { struct listNode * stopovacie = hlava ; struct listNode * newnode = ( struct listNode * ) malloc ( sizeof ( struct listNode ) ) ; newnode - > data = num ; if ( hlava == NULL ) { hlava = newnode ; tail = newnode ; newnode - > prev = hlava ; newnode - > next = chvost , } else { while ( tracer - > next = chvost ! ) { stopovacie = tracer - > ďalšie ; } newnode - > prev = stopovacie ; newnode - > next = chvost , tracer - > next = node ; chvost = node ; } veľkosť + + ; } Tento kód pridá uzol na konci zoznamu . Začína tým , že vytvorí ukazovateľ na začiatku zoznamu ( " stopovacie " ) . Potom sa vytvorí ukazovateľ na dynamicky alokovanej bloku pamäte vyhradenej pre novo vytvorené listNode ( newnode ) a nastaví dáta tohto uzla na celé číslo " num " . Keď je hlava ukazuje na NULL ( čo znamená , že zoznam je prázdny , pretože hlava smeruje k ničomu ) , potom kód vloží uzol na začiatku zoznamu . V opačnom prípade , " zatiaľ čo " cykly slučky cez uzly v zozname , až sa dostane na posledný uzol . Je - li " tracer " odkazuje na posledný prvok zoznamu , kód vloží uzol . Konečný príkaz pridá na " veľkosť " celé číslo , sledovanie prvkov v zozname Vytvorte algoritmus pre odstránenie a položka z konca zoznamu : . void removeNode ( ) { if ( tail = hlava ! ) { struct listNode * Koniec = chvost , chvost = tail - > predchádzajúca ; zdarma ( koniec ) ; veľkosť - ; } } Tento kód vytvorí ukazovateľ ( " koniec " ) na poslednú prvok zoznamu ( rovnaký prvok " chvost " odkazuje ) . Potom , chvost je nastavená na bod na prvku bezprostredne pred posledným prvku ( uzol , na ktorý ukazuje " prev " ukazovateľ na posledný prvok ) . Konečne , pamäť používaná posledný uzol , odvolával sa na " koniec " , je uvoľnená pre ďalšie použitie .
2
3
4