C Programlamada Bağlı Liste (Linked List) Kullanımı

Bağlı Liste (Linked List) Nedir?

Bağlı liste, veri yapıları arasında önemli bir yere sahip olan dinamik bir veri yapısıdır. Geleneksel dizilerden farklı olarak, bağlı listeler bellekte ardışık bir alan kaplamaz. Her bir öğe (düğüm), veriyi ve bir sonraki düğümün adresini içeren iki ana bileşenden oluşur. Bu yapı, veri ekleme ve silme işlemlerini kolaylaştırırken, dizilerdeki gibi boyut sınırlamalarını ortadan kaldırır.

Bağlı Liste Türleri

Bağlı listeler, temel olarak üç ana türe ayrılır:

1. Tek Yönlü Bağlı Liste (Singly Linked List)

Tek yönlü bağlı listede, her düğüm yalnızca bir sonraki düğümün adresini tutar. Bu yapı, verilerin yalnızca bir yönde (başlangıçtan sona) gezilmesine olanak tanır. Tek yönlü bağlı listeler, ekleme ve silme işlemlerinin kolaylığı nedeniyle sıklıkla kullanılır.

2. Çift Yönlü Bağlı Liste (Doubly Linked List)

Çift yönlü bağlı listede, her düğüm hem bir sonraki hem de bir önceki düğümün adresini tutar. Bu, listenin her iki yönde de gezilmesine olanak tanır. Çift yönlü bağlı listeler, daha fazla bellek kullanmasına rağmen, düğümlerin daha kolay silinmesi ve eklenmesi gibi avantajlar sunar.

3. Dairesel Bağlı Liste (Circular Linked List)

Dairesel bağlı listede, son düğümün bir sonraki adresi, listenin ilk düğümüne işaret eder. Bu yapı, listenin sonuna geldiğinizde tekrar başa dönmenizi sağlar. Dairesel bağlı listeler, özellikle sürekli döngüsel veri yapıları gerektiren uygulamalarda kullanılır.

Bağlı Liste Yapısı

Bağlı liste düğümü, genellikle aşağıdaki gibi tanımlanır:

“`c

struct Node {

int data;

struct Node* next;

};

“`

Bu yapı, her düğümün bir `data` alanı (veri) ve `next` alanı (bir sonraki düğümün adresi) içerdiğini gösterir.

Bağlı Liste İşlemleri

Bağlı listeler üzerinde gerçekleştirebileceğimiz temel işlemler şunlardır:

1. Ekleme (Insertion)

Bağlı listeye yeni bir düğüm eklemek, genellikle üç farklı konumda yapılabilir:

– **Başlangıca Ekleme**: Yeni düğüm, listenin başına eklenir.

– **Ortaya Ekleme**: Belirli bir konuma eklenir.

– **Sona Ekleme**: Yeni düğüm, listenin sonuna eklenir.

Örnek kod ile başlangıca düğüm ekleme işlemi:

“`c

void insertAtBeginning(struct Node** head_ref, int new_data) {

struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));

new_node->data = new_data;

new_node->next = (*head_ref);

(*head_ref) = new_node;

}

“`

2. Silme (Deletion)

Bağlı listeden düğüm silmek de mümkündür. Bu işlem, başlangıçtan, ortadan veya sondan yapılabilir. Başlangıçtan silme işlemi için örnek kod:

“`c

void deleteNode(struct Node** head_ref, int key) {

struct Node* temp = *head_ref, *prev = NULL;

if (temp != NULL && temp->data == key) {

*head_ref = temp->next;

free(temp);

return;

}

while (temp != NULL && temp->data != key) {

prev = temp;

temp = temp->next;

}

if (temp == NULL) return;

prev->next = temp->next;

free(temp);

}

“`

Bağlı listede belirli bir veriyi aramak için, her düğüm tek tek kontrol edilir. Aşağıda basit bir arama fonksiyonu örneği verilmiştir:

“`c

int search(struct Node* head, int key) {

struct Node* current = head;

while (current != NULL) {

if (current->data == key) {

return 1; // Bulundu

}

current = current->next;

}

return 0; // Bulunamadı

}

“`

4. Listeyi Yazdırma (Print)

Bağlı listedeki tüm elemanları yazdırmak için bir fonksiyon oluşturabiliriz:

“`c

void printList(struct Node* node) {

while (node != NULL) {

printf(“%d -> “, node->data);

node = node->next;

}

printf(“NULL\n”);

}

“`

Bağlı Liste Kullanım Alanları

Bağlı listeler, birçok farklı uygulamada kullanılır. Bu uygulamalardan bazıları şunlardır:

– **Dinamik Bellek Yönetimi**: Bellek alanı dinamik olarak gerektiği gibi tahsis edilebilir.

– **Veri Yapıları**: Yığınlar ve kuyruklar gibi diğer veri yapılarının temeli olarak kullanılır.

– **Uygulama Geliştirme**: Oyun geliştirme ve grafik uygulamalarında sıklıkla kullanılır.

Bağlı listeler, dinamik veri yapıları arayan yazılımcılar için önemli bir araçtır. Veri ekleme ve silme işlemlerinin kolaylığı, onları birçok uygulama için ideal hale getirir. Bağlı listelerin, uygun kullanım durumları ve avantajları ile birlikte, yazılım geliştirme sürecinde vazgeçilmez bir yere sahip olduğunu söyleyebiliriz.

SSS (Sıkça Sorulan Sorular)

1. Bağlı liste nedir?

Bağlı liste, veri öğelerinin (düğümlerin) bir zincir gibi birbirine bağlandığı bir veri yapısıdır. Her düğüm, veriyi ve bir sonraki düğümün adresini içerir.

2. Bağlı listelerin avantajları nelerdir?

Bağlı listelerin en büyük avantajı, dinamik bellek yönetimi ve veri ekleme/silme işlemlerinin kolaylığıdır. Ayrıca, sabit boyutlu dizilere göre daha esnektirler.

3. Tek yönlü ve çift yönlü bağlı liste arasındaki fark nedir?

Tek yönlü bağlı listede her düğüm yalnızca bir sonraki düğümün adresini tutarken, çift yönlü bağlı listede her düğüm hem bir sonraki hem de bir önceki düğümün adresini tutar.

4. Bağlı listeler nerelerde kullanılır?

Bağlı listeler, dinamik bellek yönetimi, yığınlar, kuyruklar, grafik uygulamaları ve oyun geliştirme gibi birçok alanda kullanılır.

5. Bağlı liste nasıl oluşturulur?

Bağlı liste oluşturmak için öncelikle düğüm yapısını tanımlamak ve ardından düğümleri ekleyerek listeyi oluşturmak gerekir.

Başa dön tuşu