logo

Susietas sąrašas

  • Susietas sąrašas gali būti apibrėžtas kaip iškviestų objektų rinkinys mazgai kurie atsitiktinai išsaugomi atmintyje.
  • Mazgą sudaro du laukai, ty duomenys, saugomi tuo konkrečiu adresu, ir rodyklė, kurioje yra kito atmintyje esančio mazgo adresas.
  • Paskutiniame sąrašo mazge yra rodyklė į nulį.
DS susietas sąrašas

Susietojo sąrašo naudojimas

  • Nereikalaujama, kad sąrašas būtų greta atmintyje. Mazgas gali būti bet kurioje atminties vietoje ir susietas, kad sudarytų sąrašą. Taip pasiekiamas optimalus erdvės panaudojimas.
  • sąrašo dydis ribojamas iki atminties dydžio ir jo nereikia deklaruoti iš anksto.
  • Susietame sąraše negali būti tuščio mazgo.
  • Primityvių tipų ar objektų reikšmes galime saugoti atskirai susietame sąraše.

Kodėl naudoti susietą sąrašą per masyvą?

Iki šiol mes naudojome masyvo duomenų struktūrą, norėdami organizuoti elementų grupę, kuri turi būti saugoma atskirai atmintyje. Tačiau „Array“ turi keletą privalumų ir trūkumų, kuriuos reikia žinoti norint nuspręsti, kokia duomenų struktūra bus naudojama visoje programoje.

Masyve yra šie apribojimai:

  1. Masyvo dydis turi būti žinomas iš anksto prieš naudojant jį programoje.
  2. Masyvo dydžio didinimas yra daug laiko reikalaujantis procesas. Vykdymo metu beveik neįmanoma išplėsti masyvo dydžio.
  3. Visi masyvo elementai turi būti nuolat saugomi atmintyje. Norint įterpti bet kurį elementą į masyvą, reikia pakeisti visus jo pirmtakus.

Susietas sąrašas yra duomenų struktūra, kuri gali įveikti visus masyvo apribojimus. Naudoti susietą sąrašą naudinga, nes

„Linux“ užduočių tvarkyklė
  1. Jis dinamiškai paskirsto atmintį. Visi susieto sąrašo mazgai yra negretimi saugomi atmintyje ir sujungiami rodyklių pagalba.
  2. Dydžio nustatymas nebėra problema, nes deklaruojant nereikia apibrėžti jo dydžio. Sąrašas auga pagal programos poreikį ir ribojamas iki turimos atminties vietos.

Atskirai susietas sąrašas arba vienpusė grandinė

Atskirai susietas sąrašas gali būti apibrėžtas kaip sutvarkytų elementų rinkinys. Elementų skaičius gali skirtis priklausomai nuo programos poreikio. Atskirai susieto sąrašo mazgas susideda iš dviejų dalių: duomenų dalies ir nuorodos dalies. Mazgo duomenų dalis saugo faktinę informaciją, kurią turi pavaizduoti mazgas, o mazgo nuorodos dalis saugo tiesioginio įpėdinio adresą.

java ir sūpynės

Vienpusis grandinės arba atskirai susietas sąrašas gali būti važiuojamas tik viena kryptimi. Kitaip tariant, galime sakyti, kad kiekviename mazge yra tik kitas rodyklė, todėl negalime eiti sąrašo atvirkštine kryptimi.

Apsvarstykite pavyzdį, kai mokinio trijuose dalykuose gauti pažymiai saugomi susietame sąraše, kaip parodyta paveikslėlyje.

DS Singly Linked sąrašas

Aukščiau pateiktame paveikslėlyje rodyklė žymi nuorodas. Kiekvieno mazgo duomenų dalyje pateikiami studento skirtingo dalyko balai. Paskutinis sąrašo mazgas identifikuojamas pagal nulinę žymeklį, kuris yra paskutinio mazgo adreso dalyje. Sąrašo duomenų dalyje galime turėti tiek elementų, kiek mums reikia.

Sudėtingumas

Duomenų struktūra Laiko sudėtingumas Kosmoso užbaigtumas
Vidutinis Blogiausias Blogiausias
Prieiga Paieška Įdėjimas Ištrynimas Prieiga Paieška Įdėjimas Ištrynimas
Atskirai susietas sąrašas aš (n) aš (n) aš (1) aš (1) O(n) O(n) O(1) O(1) O(n)

Operacijos atskirai susietame sąraše

Yra įvairių operacijų, kurias galima atlikti atskirai susietame sąraše. Žemiau pateikiamas visų tokių operacijų sąrašas.

sql tvarka pagal datą

Mazgo kūrimas

 struct node { int data; struct node *next; }; struct node *head, *ptr; ptr = (struct node *)malloc(sizeof(struct node *)); 

Įdėjimas

Įterpimas į atskirai susietą sąrašą gali būti atliekamas skirtingose ​​vietose. Atsižvelgiant į įterpiamo naujo mazgo padėtį, įterpimas skirstomas į šias kategorijas.

SN Operacija apibūdinimas
1 Įterpimas pradžioje Tai apima bet kurio elemento įterpimą sąrašo priekyje. Mums tereikia atlikti kelis nuorodos koregavimus, kad naujasis mazgas taptų sąrašo viršūne.
2 Įterpimas sąrašo pabaigoje Tai apima įterpimą paskutinę susieto sąrašo dalį. Naujas mazgas gali būti įterptas kaip vienintelis mazgas sąraše arba gali būti įterptas kaip paskutinis. Kiekviename scenarijuje įgyvendinama skirtinga logika.
3 Įterpimas po nurodyto mazgo Tai apima įterpimą po nurodyto susieto sąrašo mazgo. Turime praleisti norimą mazgų skaičių, kad pasiektume mazgą, po kurio bus įterptas naujas mazgas. .

Ištrynimas ir perėjimas

Mazgo ištrynimas iš atskirai susieto sąrašo gali būti atliekamas skirtingose ​​padėtyse. Atsižvelgiant į ištrinamo mazgo padėtį, operacija skirstoma į šias kategorijas.

SN Operacija apibūdinimas
1 Ištrynimas pradžioje Tai apima mazgo ištrynimą iš sąrašo pradžios. Tai pati paprasčiausia operacija. Tam tereikia kelių mazgų rodyklių koregavimų.
2 Ištrynimas sąrašo pabaigoje Tai apima paskutinio sąrašo mazgo ištrynimą. Sąrašas gali būti tuščias arba pilnas. Skirtingiems scenarijams įgyvendinama skirtinga logika.
3 Ištrynimas po nurodyto mazgo Tai apima mazgo ištrynimą po nurodyto mazgo sąraše. turime praleisti norimą mazgų skaičių, kad pasiektume mazgą, po kurio mazgas bus ištrintas. Tam reikia pereiti per sąrašą.
4 Traversavimas Keliaudami mes tiesiog aplankome kiekvieną sąrašo mazgą bent kartą, kad galėtume atlikti tam tikrą operaciją, pavyzdžiui, atspausdinti kiekvieno sąraše esančio mazgo duomenų dalį.
5 Ieškoma Ieškodami kiekvieną sąrašo elementą suderiname su nurodytu elementu. Jei elementas randamas bet kurioje vietoje, grąžinama to elemento vieta, kitaip grąžinamas nulis. .

Susietas sąrašas C: Meniu valdoma programa

 #include #include struct node { int data; struct node *next; }; struct node *head; void beginsert (); void lastinsert (); void randominsert(); void begin_delete(); void last_delete(); void random_delete(); 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 node after specified location
7.Search for an element
8.Show
9.Exit
'); printf('
Enter your choice?
'); scanf('
%d',&choice); switch(choice) { case 1: beginsert(); break; case 2: lastinsert(); break; case 3: randominsert(); break; case 4: begin_delete(); break; case 5: last_delete(); break; case 6: random_delete(); break; case 7: search(); break; case 8: display(); break; case 9: exit(0); break; default: printf('Please enter valid choice..'); } } } void beginsert() { struct node *ptr; int item; ptr = (struct node *) malloc(sizeof(struct node *)); if(ptr == NULL) { printf('
OVERFLOW'); } else { printf('
Enter value
'); scanf('%d',&item); ptr->data = item; ptr->next = head; head = ptr; printf('
Node inserted'); } } void lastinsert() { 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; head = ptr; printf('
Node inserted'); } else { temp = head; while (temp -> next != NULL) { temp = temp -> next; } temp->next = ptr; ptr->next = NULL; printf('
Node inserted'); } } } void randominsert() { int i,loc,item; struct node *ptr, *temp; ptr = (struct node *) malloc (sizeof(struct node)); if(ptr == NULL) { printf('
OVERFLOW'); } else { printf('
Enter element value'); scanf('%d',&item); ptr->data = item; printf('
Enter the location after which you want to insert '); scanf('
%d',&loc); temp=head; for(i=0;inext; if(temp == NULL) { printf('
can't insert
'); return; } } ptr ->next = temp ->next; temp ->next = ptr; printf('
Node inserted'); } } void begin_delete() { struct node *ptr; if(head == NULL) { printf('
List is empty
'); } else { ptr = head; head = ptr->next; free(ptr); printf('
Node deleted from the begining ...
'); } } void last_delete() { struct node *ptr,*ptr1; if(head == NULL) { printf('
list is empty'); } else if(head -> next == NULL) { head = NULL; free(head); printf('
Only node of the list deleted ...
'); } else { ptr = head; while(ptr->next != NULL) { ptr1 = ptr; ptr = ptr ->next; } ptr1->next = NULL; free(ptr); printf('
Deleted Node from the last ...
'); } } void random_delete() { struct node *ptr,*ptr1; int loc,i; printf('
 Enter the location of the node after which you want to perform deletion 
'); scanf('%d',&loc); ptr=head; for(i=0;inext; if(ptr == NULL) { printf('
Can't delete'); return; } } ptr1 ->next = ptr ->next; free(ptr); printf('
Deleted node %d ',loc+1); } 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; } else { flag=1; } i++; ptr = ptr -> next; } if(flag==1) { printf('Item not found
'); } } } void display() { struct node *ptr; ptr = head; if(ptr == NULL) { printf('Nothing to print'); } else { printf('
printing values . . . . .
'); while (ptr!=NULL) { printf('
%d',ptr->data); ptr = ptr -> next; } } } 

Išvestis:

 *********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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 1 Enter value 1 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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 2 Enter value? 2 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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 3 Enter element value1 Enter the location after which you want to insert 1 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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 8 printing values . . . . . 1 2 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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 2 Enter value? 123 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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 1 Enter value 1234 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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 4 Node deleted from the begining ... *********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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 5 Deleted Node from the last ... *********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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 6 Enter the location of the node after which you want to perform deletion 1 Deleted node 2 *********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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 8 printing values . . . . . 1 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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 7 Enter item which you want to search? 1 item found at location 1 item found at location 2 *********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 node after specified location 7.Search for an element 8.Show 9.Exit Enter your choice? 9