Tek Yönlü Dairesel Bağlı Listelerde listenin son düğümü tek yönlü doğrusal linked listteki gibi null'u değil de artık baştaki head düğümümüzü gösterir.Dairesel Bağlı Listenin son düğümüne ulaşmak için artık temp->next!=NULL değil de artık nexti head'i göstereceği için temp->next!=head şeklinde yazarak sön düğümü bulacağız.
Dairesel Bağlı Listemizin de C dilinde yapısı şu şekilde olur;
struct Node {
int data;
struct Node * next;
};struct Node * head;
Bu derste circular linked listte başa ve sona eleman eklemeyi göreceğiz her birini tek tek yorum satırlarıyla anlaşılır bir şekilde koda yazdım aşağıda hepsi bulunmakta..
#include<stdio.h>
#include<stdlib.h>
struct Node {
int data;
struct Node * next;
};struct Node * head=NULL;
struct Node * temp=NULL;void basaElemanEkle(int data){
// eklenecek düğüm için bellekten yer ayırıyoruz
struct Node * ptr;
ptr = (struct Node * ) malloc (sizeof(struct Node));
// datamızı aktarıyoruz
ptr->data=data;
// eğer ki başta düğüm yok ise
if(head==NULL){
// baştaki düğümümüz yeni eklenecek düğüm olacak ve
head=ptr;
// next'i kendisini gösterecek circular linked list olduğu için
ptr->next=ptr;
}
// başta düğüm var ise
else{
// baştaki düğümü geçici düğümümüze atıyoruz çünkü
temp=head;
// sondaki düğümü bulabilmek için ve while'de sondaki düğümü de temp'e atıyoruz
while(temp->next!=head){
temp=temp->next;
}
// artık yeni eklediğimiz node'nin next'i şuan baştaki node'yi gösterecek
ptr->next=head;
// sondaki düğümün next'i yeni eklediğimiz boştaki düğümü gösterecek
temp->next=ptr;
// ve baştaki düğümümüz artık yeni eklediğimiz düğüm olan ptr olacak
head=ptr;
}}
void sonaElemanEkle(int data){
// eklenecek düğüm için bellekten yer ayırıyoruz
struct Node * ptr;
ptr = (struct Node * ) malloc (sizeof(struct Node));
// datamızı aktarıyoruz
ptr->data=data;
// eğer ki başta düğüm yok ise
if(head==NULL){
// sondaki düğümümüz yeni eklenecek düğüm olacak ve
head=ptr;
// next'i kendisini gösterecek circular linked list olduğu için
ptr->next=ptr;
}
// başta düğüm var ise
else{
// baştaki düğümü geçici düğümümüze atıyoruz çünkü
temp=head;
// sondaki düğümü bulabilmek için ve while'de sondaki düğümü de temp'e atıyoruz
while(temp->next!=head){
temp=temp->next;
}
// artık yeni ekleyeceğimiz düğümümüz şuan sondaki düğüm olan temp'in next'i yani baştaki düğümü gösterecek
ptr->next=temp->next;
// ve temp düğümümüz sondaki düğüm artık yeni eklenen ptr düğümünü gösterecek çünkü ptr artık son düğüm oldu.
temp->next=ptr;
}}
void listele(){
if(head==NULL){
printf("List is empty!!");
}else{
temp=head;
printf("\n****************************************\n");
while(temp->next!=head){
printf("%d\t",temp->data);
temp=temp->next;
}
printf("%d\t",temp->data);
printf("\n****************************************\n");
}
}
int main(){
int data,choice;
while(1){
printf("1)Basa Eleman Ekle\n");
printf("2)Sona Eleman Ekle\n");
printf("Seciminiz : ");
scanf("%d",&choice);
switch(choice){
case 1:printf("Data : ");scanf("%d",&data);basaElemanEkle(data);listele();break;
case 2:printf("Data : ");scanf("%d",&data);sonaElemanEkle(data);listele();break;
}
}
return 0;
}