logo

Kaksoislinkitetty lista

Kaksoislinkitetty lista on monimutkainen linkitetty luettelo, jossa solmu sisältää osoittimen sekvenssin edelliseen ja seuraavaan solmuun. Siksi kaksoislinkitetyssä luettelossa solmu koostuu kolmesta osasta: solmutiedot, osoitin järjestyksessä seuraavaan solmuun (seuraava osoitin) , osoitin edelliseen solmuun (edellinen osoitin). Esimerkkisolmu kaksoislinkitetyssä luettelossa on esitetty kuvassa.


Kaksoislinkitetty lista

Seuraavassa kuvassa näkyy kaksoislinkitetty luettelo, joka sisältää kolme solmua, joiden dataosassa on numerot 1-3.


Kaksoislinkitetty lista

C:ssä kaksoislinkitetyn listan solmun rakenne voidaan antaa seuraavasti:

 struct node { struct node *prev; int data; struct node *next; } 

The Ed osa ensimmäistä solmua ja Seuraava osa viimeisen solmun sisältää aina nollan osoittavan pään kumpaankin suuntaan.

Yksittäin linkitetyssä listassa voisimme kulkea vain yhteen suuntaan, koska jokainen solmu sisältää seuraavan solmun osoitteen ja sillä ei ole tietuetta aiemmista solmuistaan. Kaksinkertaisesti linkitetty luettelo kuitenkin ylittää tämän yksittäin linkitetyn luettelon rajoituksen. Koska listan jokainen solmu sisältää edellisen solmunsa osoitteen, voimme löytää kaikki tiedot myös edellisestä solmusta käyttämällä kunkin solmun edelliseen osaan tallennettua aiempaa osoitetta.

Muisti Kaksoislinkitetyn luettelon esitys

Muisti Kaksoislinkitetyn luettelon esitys näkyy seuraavassa kuvassa. Yleensä kaksoislinkitetty lista kuluttaa enemmän tilaa jokaiselle solmulle ja aiheuttaa siksi laajempia perustoimintoja, kuten lisääminen ja poistaminen. Voimme kuitenkin helposti muokata luettelon elementtejä, koska luettelo säilyttää osoittimet molempiin suuntiin (eteen- ja taaksepäin).

Seuraavassa kuvassa listan ensimmäinen elementti, joka on tallennettu osoitteeseen 1. Pääosoitin osoittaa aloitusosoitteeseen 1. Koska tämä on ensimmäinen listaan ​​lisättävä elementti, niin Ed luettelosta sisältää tyhjä. Listan seuraava solmu sijaitsee osoitteessa 4, joten ensimmäinen solmu sisältää 4:n seuraavassa osoittimessaan.

Voimme kulkea listaa tällä tavalla, kunnes löydämme minkä tahansa solmun, joka sisältää nollan tai -1:n seuraavassa osassaan.


Kaksoislinkitetty lista

Toiminnot kaksoislinkitetyssä luettelossa

Solmun luominen

 struct node { struct node *prev; int data; struct node *next; }; struct node *head; 

Kaikki muut kaksoislinkitettyjen luetteloiden toiminnot on kuvattu seuraavassa taulukossa.

SN Operaatio Kuvaus
1 Lisäys alussa Solmun lisääminen linkitettyyn luetteloon alussa.
2 Lisäys lopussa Solmun lisääminen linkitettyyn luetteloon loppuun.
3 Lisäys määritetyn solmun jälkeen Solmun lisääminen linkitettyyn luetteloon määritetyn solmun jälkeen.
4 Poisto alussa Solmun poistaminen luettelon alusta
5 Poisto lopussa Solmun poistaminen luettelon lopusta.
6 Datan antaneen solmun poistaminen Sellaisen solmun poistaminen, joka on juuri annetun datan sisältävän solmun jälkeen.
7 Etsitään Kunkin solmun tietojen vertaaminen haettavaan kohteeseen ja palauttaa kohteen sijainti luettelossa, jos muu löydetty kohde palauttaa nollan.
8 Kulkeminen Vieraile luettelon jokaisessa solmussa vähintään kerran tietyn toiminnon, kuten haun, lajittelun, näytön jne., suorittamiseksi.

C:n valikkopohjainen ohjelma toteuttaa kaikki kaksoislinkitetyn luettelon toiminnot

 #include #include struct node { struct node *prev; struct node *next; int data; }; struct node *head; void insertion_beginning(); void insertion_last(); void insertion_specified(); void deletion_beginning(); void deletion_last(); void deletion_specified(); void display(); void search(); void main () { int choice =0; while(choice != 9) { printf('
*********Main Menu*********
'); printf('
Choose one option from the following list ...
'); printf('
===============================================
'); printf('
1.Insert in begining
2.Insert at last
3.Insert at any random location
4.Delete from Beginning
 5.Delete from last
6.Delete the node after the given data
7.Search
8.Show
9.Exit
'); printf('
Enter your choice?
'); scanf('
%d',&choice); switch(choice) { case 1: insertion_beginning(); break; case 2: insertion_last(); break; case 3: insertion_specified(); break; case 4: deletion_beginning(); break; case 5: deletion_last(); break; case 6: deletion_specified(); break; case 7: search(); break; case 8: display(); break; case 9: exit(0); break; default: printf('Please enter valid choice..'); } } } void insertion_beginning() { struct node *ptr; int item; ptr = (struct node *)malloc(sizeof(struct node)); if(ptr == NULL) { printf('
OVERFLOW'); } else { printf('
Enter Item value'); scanf('%d',&item); if(head==NULL) { ptr->next = NULL; ptr->prev=NULL; ptr->data=item; head=ptr; } else { ptr->data=item; ptr->prev=NULL; ptr->next = head; head->prev=ptr; head=ptr; } printf('
Node inserted
'); } } void insertion_last() { struct node *ptr,*temp; int item; ptr = (struct node *) malloc(sizeof(struct node)); if(ptr == NULL) { printf('
OVERFLOW'); } else { printf('
Enter value'); scanf('%d',&item); ptr->data=item; if(head == NULL) { ptr->next = NULL; ptr->prev = NULL; head = ptr; } else { temp = head; while(temp->next!=NULL) { temp = temp->next; } temp->next = ptr; ptr ->prev=temp; ptr->next = NULL; } } printf('
node inserted
'); } void insertion_specified() { struct node *ptr,*temp; int item,loc,i; ptr = (struct node *)malloc(sizeof(struct node)); if(ptr == NULL) { printf('
 OVERFLOW'); } else { temp=head; printf('Enter the location'); scanf('%d',&loc); for(i=0;inext; if(temp == NULL) { printf('
 There are less than %d elements', loc); return; } } printf('Enter value'); scanf('%d',&item); ptr->data = item; ptr->next = temp->next; ptr -> prev = temp; temp->next = ptr; temp->next->prev=ptr; printf('
node inserted
'); } } void deletion_beginning() { struct node *ptr; if(head == NULL) { printf('
 UNDERFLOW'); } else if(head->next == NULL) { head = NULL; free(head); printf('
node deleted
'); } else { ptr = head; head = head -> next; head -> prev = NULL; free(ptr); printf('
node deleted
'); } } void deletion_last() { struct node *ptr; if(head == NULL) { printf('
 UNDERFLOW'); } else if(head->next == NULL) { head = NULL; free(head); printf('
node deleted
'); } else { ptr = head; if(ptr->next != NULL) { ptr = ptr -> next; } ptr -> prev -> next = NULL; free(ptr); printf('
node deleted
'); } } void deletion_specified() { struct node *ptr, *temp; int val; printf('
 Enter the data after which the node is to be deleted : '); scanf('%d', &val); ptr = head; while(ptr -> data != val) ptr = ptr -> next; if(ptr -> next == NULL) { printf('
Can't delete
'); } else if(ptr -> next -> next == NULL) { ptr ->next = NULL; } else { temp = ptr -> next; ptr -> next = temp -> next; temp -> next -> prev = ptr; free(temp); printf('
node deleted
'); } } void display() { struct node *ptr; printf('
 printing values...
'); ptr = head; while(ptr != NULL) { printf('%d
',ptr->data); ptr=ptr->next; } } void search() { struct node *ptr; int item,i=0,flag; ptr = head; if(ptr == NULL) { printf('
Empty List
'); } else { printf('
Enter item which you want to search?
'); scanf('%d',&item); while (ptr!=NULL) { if(ptr->data == item) { printf('
item found at location %d ',i+1); flag=0; break; } else { flag=1; } i++; ptr = ptr -> next; } if(flag==1) { printf('
Item not found
'); } } } 

Lähtö

 *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 8 printing values... *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 1 Enter Item value12 Node inserted *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 1 Enter Item value123 Node inserted *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 1 Enter Item value1234 Node inserted *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 8 printing values... 1234 123 12 *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 2 Enter value89 node inserted *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 3 Enter the location1 Enter value12345 node inserted *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 8 printing values... 1234 123 12345 12 89 *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 4 node deleted *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 5 node deleted *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 8 printing values... 123 12345 *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 6 Enter the data after which the node is to be deleted : 123 *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 8 printing values... 123 *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 7 Enter item which you want to search? 123 item found at location 1 *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 6 Enter the data after which the node is to be deleted : 123 Can't delete *********Main Menu********* Choose one option from the following list ... =============================================== 1.Insert in begining 2.Insert at last 3.Insert at any random location 4.Delete from Beginning 5.Delete from last 6.Delete the node after the given data 7.Search 8.Show 9.Exit Enter your choice? 9 Exited..