Dairesel Bağlı Liste Ekleme C Kodu

Dairesel Bağlı Liste Ekleme: Kapsamlı Bir Kılavuz

Giriş

Dairesel bağlı listeler, verileri dairesel bir şekilde birbirine bağlayan özel bir veri yapısı türüdür. Bu yapılar, verilerin eklenmesi, silinmesi ve aranması için verimli işlemler sağlar. Bu makale, C dilinde dairesel bağlı listeye nasıl eleman ekleneceğini ayrıntılı olarak açıklayacaktır.

Dairesel Bağlı Listeler

Dairesel bağlı listeler, her düğümün bir sonraki ve bir önceki düğüme işaret ettiği tek yönlü bağlı listelerin bir çeşididir. Son düğüm, ilk düğüme işaret ederek listeyi dairesel hale getirir. Bu yapı, listenin başlangıç ve bitiş noktalarının belirsiz olmasını sağlar.

Ekleme İşlemi

Dairesel bağlı listeye bir eleman eklemek için aşağıdaki adımlar izlenir:

  1. Yeni Bir Düğüm Oluşturun: Eklenecek veriyi tutacak yeni bir düğüm oluşturun.
  2. Liste Boşsa: Liste boşsa, yeni düğümü hem sonraki hem de önceki düğüm olarak kendisine işaret edin.
  3. Liste Boş Değilse:
  4. Listenin Sonuna Ekleme: Yeni düğümü listenin son düğümüne bağlayın. Son düğümün sonraki düğümünü yeni düğüme, yeni düğümün önceki düğümünü ise son düğüme işaret edin.
  5. Listenin Başına Ekleme: Yeni düğümü listenin ilk düğümüne bağlayın. İlk düğümün önceki düğümünü yeni düğüme, yeni düğümün sonraki düğümünü ise ilk düğüme işaret edin.
  6. Listenin Ortasına Ekleme: Yeni düğümü, ekleme noktasından önceki ve sonraki düğümlere bağlayın. Önceki düğümün sonraki düğümünü yeni düğüme, sonraki düğümün önceki düğümünü ise yeni düğüme işaret edin.

Örnek Kod

Aşağıdaki C kodu, bir dairesel bağlı listeye bir eleman eklemeyi göstermektedir:

“`c

include

include

struct Node {
int data;
struct Node next;
struct Node
prev;
};

struct Node insert_at_beginning(struct Node head, int data) {
struct Node new_node = (struct Node )malloc(sizeof(struct Node));
new_node->data = data;

if (head == NULL) {
    new_node->next = new_node;
    new_node->prev = new_node;
    head = new_node;
} else {
    new_node->next = head;
    new_node->prev = head->prev;
    head->prev->next = new_node;
    head->prev = new_node;
}

return head;

}

struct Node insert_at_end(struct Node head, int data) {
struct Node new_node = (struct Node )malloc(sizeof(struct Node));
new_node->data = data;

if (head == NULL) {
    new_node->next = new_node;
    new_node->prev = new_node;
    head = new_node;
} else {
    new_node->next = head;
    new_node->prev = head->prev;
    head->prev->next = new_node;
    head->prev = new_node;
}

return head;

}

struct Node insert_at_position(struct Node head, int data, int position) {
struct Node new_node = (struct Node )malloc(sizeof(struct Node));
new_node->data = data;

if (head == NULL) {
    new_node->next = new_node;
    new_node->prev = new_node;
    head = new_node;
} else {
    struct Node *current = head;
    int count = 1;

    while (current->next != head && count < position) {
        current = current->next;
        count++;
    }

    if (count == position) {
        new_node->next = current->next;
        new_node->prev = current;
        current->next = new_node;
        new_node->next->prev = new_node;
    } else {
        printf("Geçersiz konum.\n");
    }
}

return head;

}

int main() {
struct Node *head = NULL;

head = insert_at_beginning(head, 10);
head = insert_at_end(head, 20);
head = insert_at_position(head, 15, 2);

struct Node *temp = head;
do {
    printf("%d ", temp->data);
    temp = temp->next;
} while (temp != head);

printf("\n");

return 0;

}
“`

Faydalı Kaynaklar


Yayımlandı

kategorisi