Veri Yapısı - Çift Bağlantılı Liste
Çift Bağlantılı Liste, Tek Bağlantılı Liste ile karşılaştırıldığında ileri ve geri kolayca gezinmenin her iki şekilde de mümkün olduğu Bağlantılı listenin bir varyasyonudur. Aşağıdakiler, çift bağlantılı liste kavramını anlamak için önemli terimlerdir.
Link - Bağlantılı bir listenin her bağlantısı, öğe adı verilen bir veriyi depolayabilir.
Next - Bağlantılı listenin her bağlantısı, Sonraki adlı sonraki bağlantıya bir bağlantı içerir.
Prev - Bağlantılı bir listenin her bağlantısı, Önceki adlı önceki bağlantıya bir bağlantı içerir.
LinkedList - Bağlantılı Liste, İlk adlı ilk bağlantıya ve Son adlı son bağlantıya bağlantı bağlantısını içerir.
Çift Bağlantılı Liste Temsili
Yukarıdaki şekle göre, dikkate alınması gereken önemli noktalar aşağıdadır.
Çift Bağlantılı Liste, ilk ve son olarak adlandırılan bir bağlantı öğesi içerir.
Her bağlantı bir veri alanı ve next ve prev olarak adlandırılan iki bağlantı alanı taşır.
Her bağlantı, bir sonraki bağlantısı kullanılarak bir sonraki bağlantıya bağlanır.
Her bağlantı, önceki bağlantısı kullanılarak önceki bağlantıya bağlanır.
Son bağlantı, listenin sonunu işaretlemek için boş olarak bir bağlantı taşır.
Temel işlemler
Bir liste tarafından desteklenen temel işlemler aşağıdadır.
Insertion - Listenin başına bir öğe ekler.
Deletion - Listenin başındaki bir öğeyi siler.
Insert Last - Listenin sonuna bir öğe ekler.
Delete Last - Listenin sonundaki bir öğeyi siler.
Insert After - Listedeki bir öğeden sonra bir öğe ekler.
Delete - tuşunu kullanarak listeden bir öğeyi siler.
Display forward - Tam listeyi ileriye doğru görüntüler.
Display backward - Tam listeyi geriye doğru görüntüler.
Yerleştirme İşlemi
Aşağıdaki kod, çift bağlantılı bir listenin başlangıcındaki ekleme işlemini gösterir.
Misal
//insert link at the first location
void insertFirst(int key, int data) {
//create a link
struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = key;
link->data = data;
if(isEmpty()) {
//make it the last link
last = link;
} else {
//update first prev link
head->prev = link;
}
//point it to old first link
link->next = head;
//point first to new first link
head = link;
}
Silme İşlemi
Aşağıdaki kod, çift bağlantılı bir listenin başlangıcındaki silme işlemini gösterir.
Misal
//delete first item
struct node* deleteFirst() {
//save reference to first link
struct node *tempLink = head;
//if only one link
if(head->next == NULL) {
last = NULL;
} else {
head->next->prev = NULL;
}
head = head->next;
//return the deleted link
return tempLink;
}
Bir İşlemin Sonunda Yerleştirme
Aşağıdaki kod, çift bağlantılı listenin son konumundaki ekleme işlemini gösterir.
Misal
//insert link at the last location
void insertLast(int key, int data) {
//create a link
struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = key;
link->data = data;
if(isEmpty()) {
//make it the last link
last = link;
} else {
//make link a new last link
last->next = link;
//mark old last node as prev of new link
link->prev = last;
}
//point last to new last node
last = link;
}
Uygulamayı C programlama dilinde görmek için lütfen buraya tıklayın .