
Veri Yapıları Dairesel Bağlı Liste (Circular Linked List)
Öncelikle dairesel bağlı liste yapısının mantığını anlamak için tek yönlü bağlı listeyi iyi anlamak lazım çünkü tek yönlü bağlı listenin modifikasyona uğramış hali diyebiliriz 🙂 sizin için yazdığım yazıma bakabilirsiniz :
Dairesel bağlı liste NULL ile bitmez. Farkıda budur. Son eleman’ın next(pointer) ı head(ilk eleman) ı gösterir. Dairesel bağlı listede herhangi bir noktadan başlayarak tüm listeyi dolaşabilirsiniz.Ancak ilk düğüme tekrar geldiğinizde durmanız gerekir.

Yapımızı oluşturuyoruz. Tek yönlü bağlı listeden farkı kullanımda ortaya çıkacak.
1 2 3 4 5 6 |
struct Node { int data; struct Node *next; }; |
Lisemize eleman eklemeye yarayacak methodumuzu yazıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
void push(struct Node **head_ref, int data)//ilk eleman eklenirken head değişicek bu yüzden "**" ile düğümü alıyoruz. { struct Node *ptr1 = (struct Node *)malloc(sizeof(struct Node));//yeni oluşturucagımız eleman için ramden yer alıyoruz. struct Node *temp = *head_ref;//head ımızı tutmak için yapımızdan kopya oluşturuyoruz. ptr1->data = data;//parametre olarak gelen datayı oluşturdugumuz tre1 e atıyoruz. ptr1->next = *head_ref;//oluşturdugumuz yapının next(işaretci)si ne head ı atıyoruz. if (*head_ref != NULL)//head boşdeğilse while döngüsü ile sonuncu elamana gidip next ine ptr1 i atıyoruz. { while (temp->next != *head_ref) temp = temp->next; temp->next = ptr1; } else//eğer head boş ise başka eleman olmadıgından direk next olarak kendisini gösteriyor. ptr1->next = ptr1; *head_ref = ptr1;// son olarak head ımıza oluşturdugumuz elemanı atıyoruz. } |
Döngümüzü yazdıracak fonksiyonumuzu yazıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void printList(struct Node *head) { struct Node *temp = head; if (head != NULL) { do// do while kullanmamızın sebebi en son elamanıda yazdırıcak olmamız. { printf("%d ", temp->data); temp = temp->next; } while (temp != head);// döngümüz tekrar head a gelesiye kadar dönüyor ve elemanları yazdırıyor. } } |
Son olarak main imizde kullanalım :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
int main() { struct Node *head = NULL;//yapımızı oluşturuyoruz. direk null atıyoruz. //eleman ekliyoruz. push(&head, 12); push(&head, 56); push(&head, 2); push(&head, 11); printf("Dairesel Bağlı liste elemanları : \n ");//\n alt satıra geçme komutu printList(head);//yazdırmak için fonkisyonumuzu çagırıyoruz. return 0; } |
indirmek için Github :https://github.com/ibrahim-ekinci/CircularLinkedList