logo

Bağlantılı liste

  • Bağlantılı Liste, adı verilen nesnelerin koleksiyonu olarak tanımlanabilir. düğümler bunlar rastgele olarak hafızaya kaydedilir.
  • Bir düğüm iki alan içerir; yani söz konusu adreste depolanan veriler ve bellekteki bir sonraki düğümün adresini içeren işaretçi.
  • Listenin son düğümü boş değere işaret eden işaretçiyi içerir.
DS Bağlantılı Liste

Bağlantılı Listenin Kullanım Alanları

  • Listenin bellekte bitişik olarak bulunması zorunlu değildir. Düğüm hafızanın herhangi bir yerinde bulunabilir ve bir liste oluşturmak için birbirine bağlanabilir. Bu, alanın optimize edilmiş kullanımını sağlar.
  • liste boyutu bellek boyutuyla sınırlıdır ve önceden bildirilmesine gerek yoktur.
  • Bağlantılı listede boş düğüm bulunamaz.
  • İlkel türlerin veya nesnelerin değerlerini tek bağlantılı listede saklayabiliriz.

Neden dizi üzerinde bağlantılı liste kullanılmalı?

Şimdiye kadar, bellekte ayrı ayrı saklanacak öğe gruplarını düzenlemek için dizi veri yapısını kullanıyorduk. Ancak Array'in, program boyunca kullanılacak veri yapısına karar verebilmek için bilinmesi gereken birçok avantajı ve dezavantajı vardır.

Dizi aşağıdaki sınırlamaları içerir:

  1. Dizinin boyutu programda kullanılmadan önce önceden bilinmelidir.
  2. Dizinin boyutunun arttırılması zaman alan bir işlemdir. Çalışma zamanında dizinin boyutunu genişletmek neredeyse imkansızdır.
  3. Dizideki tüm elemanların bitişik olarak bellekte saklanması gerekir. Diziye herhangi bir öğenin eklenmesi, önceki tüm öğelerin kaydırılmasını gerektirir.

Bağlantılı liste, bir dizinin tüm sınırlamalarını aşabilen veri yapısıdır. Bağlantılı listeyi kullanmak faydalıdır çünkü,

nfa örnekleri
  1. Belleği dinamik olarak tahsis eder. Bağlantılı listenin tüm düğümleri bitişik olmayan bir şekilde bellekte saklanır ve işaretçilerin yardımıyla birbirine bağlanır.
  2. Beyan sırasında boyutunu tanımlamamıza gerek kalmadığı için boyutlandırma artık sorun değil. Liste programın talebine göre büyür ve mevcut hafıza alanıyla sınırlıdır.

Tek bağlantılı liste veya Tek yönlü zincir

Tek bağlantılı liste, sıralı öğeler kümesinin toplanması olarak tanımlanabilir. Programın ihtiyacına göre eleman sayısı değişebilir. Tek bağlantılı listedeki bir düğüm iki bölümden oluşur: veri bölümü ve bağlantı bölümü. Düğümün veri kısmı, düğüm tarafından temsil edilecek gerçek bilgiyi saklarken, düğümün bağlantı kısmı, bir sonraki ardılının adresini saklar.

Tek yönlü zincir veya tek bağlantılı liste yalnızca bir yönde geçilebilir. Başka bir deyişle, her düğümün yalnızca bir sonraki işaretçiyi içerdiğini söyleyebiliriz, bu nedenle listeyi ters yönde geçemeyiz.

Öğrencinin üç dersten aldığı notların şekilde gösterildiği gibi bağlantılı bir listede saklandığı bir örneği düşünün.

Java dizesi.format
DS Tek Bağlantılı Liste

Yukarıdaki şekilde ok bağlantıları temsil etmektedir. Her düğümün veri kısmı öğrencinin farklı konularda aldığı notları içerir. Listedeki son düğüm, son düğümün adres kısmında bulunan boş gösterici ile tanımlanır. Listenin veri kısmında istediğimiz kadar öğeye sahip olabiliriz.

Karmaşıklık

Veri yapısı Zaman Karmaşıklığı Alan Bütünlüğü
Ortalama En kötüsü En kötüsü
Erişim Aramak Ekleme Silme Erişim Aramak Ekleme Silme
Tek Bağlantılı Liste içinde) içinde) ben(1) ben(1) Açık) Açık) Ç(1) Ç(1) Açık)

Tek Bağlantılı Listedeki İşlemler

Tek bağlantılı listede gerçekleştirilebilecek çeşitli işlemler vardır. Bu tür tüm işlemlerin bir listesi aşağıda verilmiştir.

Düğüm Oluşturma

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

Ekleme

Tek bağlantılı bir listeye ekleme işlemi farklı konumlarda gerçekleştirilebilir. Eklenen yeni düğümün konumuna bağlı olarak ekleme aşağıdaki kategorilere ayrılır.

dizi listesi java
SN Operasyon Tanım
1 Başlangıçta ekleme Listenin başına herhangi bir öğenin eklenmesini içerir. Yeni düğümü listenin başı yapmak için sadece birkaç bağlantı ayarlaması yapmamız gerekiyor.
2 Listenin sonuna ekleme Bağlantılı listenin sonuna eklemeyi içerir. Yeni düğüm listedeki tek düğüm olarak eklenebilir veya sonuncu olarak eklenebilir. Her senaryoda farklı mantıklar uygulanır.
3 Belirtilen düğümden sonra ekleme Bağlantılı listenin belirtilen düğümünden sonra eklemeyi içerir. Yeni düğümün ekleneceği düğüme ulaşabilmek için istenilen sayıda düğümü atlamamız gerekiyor. .

Silme ve Geçiş

Tek bağlantılı bir listeden bir düğümün silinmesi farklı konumlarda gerçekleştirilebilir. Silinen düğümün konumuna bağlı olarak işlem aşağıdaki kategorilere ayrılır.

SN Operasyon Tanım
1 Başlangıçta silme Listenin başındaki bir düğümün silinmesini içerir. Bu, tüm işlemler arasında en basit işlemdir. Düğüm işaretçilerinde yalnızca birkaç ayarlamaya ihtiyaç var.
2 Listenin sonunda silme Listenin son düğümünün silinmesini içerir. Liste boş veya dolu olabilir. Farklı senaryolar için farklı mantık uygulanır.
3 Belirtilen düğümden sonra silme Listede belirtilen düğümden sonraki düğümün silinmesini içerir. Düğümün silineceği düğüme ulaşmak için istenilen sayıda düğümü atlamamız gerekir. Bu, listede gezinmeyi gerektirir.
4 Geçiş Geçiş sırasında, listedeki her bir düğümü, üzerinde belirli bir işlem gerçekleştirmek için en az bir kez ziyaret ederiz, örneğin listede bulunan her düğümün veri kısmını yazdırmak.
5 Aranıyor Arama yaparken listenin her elemanını verilen elemanla eşleştiririz. Öğe herhangi bir konumda bulunursa o öğenin konumu döndürülür, aksi halde null değeri döndürülür. .

C'de Bağlantılı Liste: Menüye Dayalı Program

 #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; } } } 

Çıktı:

 *********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