İçeriği Paylaş:

DAİRESEL LİSTELER

DAİRESEL LİSTELER

 Dairesel  tek  bağlı  listeleri  doğrusal  listelerden ayıran  özellik;  son bağ alanında NULL yerine liste başının adresinin saklanmasıdır. Buradan hareketle çift bağlı dairesel listelerde bu duruma ek olarak ilk düğümün ilk bağ alanında da son düğümün adresi saklanmaktadır.Tek Bağlı Dairesel ListelerBu veri yapısı iki ayrı alandan oluşur. Veri alanı ve bağ alanı.Şekilden de anlaşılacağı üzere listenin son düğümü, listenin ilk düğümünü işaret etmektedir.Ekran AlıntısıÇift Bağlı Dairesel Listeler Bu veri yapısının tek bağlı dairesel listeden farkı, önceki düğümün de adresini saklayan bir işaretçi bulunmasıdır. Bu sayede listede iki yönlü ilerleme yeteneği sağlanmış olur.Ekran Alıntısı

Örnek:

 #include <stdlib.h>#include <string.h>#include <stdio.h>#include <conio.h> struct listyapi{struct listyapi *onceki; char    adi[21];//veri alanı struct listyapi *sonraki;};typedef struct listyapi listnode; //artık listyapi yerine listnode kullanılacaklistnode *listebasi;   /* Herzaman listenin basini gosteren bir işaretçi */void basaekle(char *s){listnode *yeni_dugum;yeni_dugum = (listnode*) malloc(sizeof(listnode));/* yeni kayida yer al */strcpy(yeni_dugum->adi, s);             /*bilgiyi yeni kayida yaz */if(listebasi==NULL){}else{}}listebasi=yeni_dugum; yeni_dugum->onceki=yeni_dugum; yeni_dugum->sonraki=yeni_dugum;listnode *son_node=listebasi->onceki; yeni_dugum->sonraki = listebasi; yeni_dugum->onceki   = son_node; listebasi->onceki             = yeni_dugum; son_node->sonraki     = yeni_dugum; listebasi=yeni_dugum;void sonaekle(char *s){listnode *yeni_dugum;yeni_dugum = (listnode*) malloc(sizeof(listnode));/* yeni kayida yer al */strcpy(yeni_dugum->adi, s);             /*bilgiyi yeni kayida yaz */if(listebasi==NULL){}else{}}listebasi=yeni_dugum; yeni_dugum->onceki=yeni_dugum; yeni_dugum->sonraki=yeni_dugum;listnode *son_node=listebasi->onceki; yeni_dugum->sonraki = listebasi; yeni_dugum->onceki   = son_node; listebasi->onceki             = yeni_dugum; son_node->sonraki     = yeni_dugum;void listlist(void){listnode *aktif_node = listebasi; while (aktif_node != NULL){break;}printf(“%s  “,aktif_node->adi); aktif_node = aktif_node->sonraki;if(aktif_node->onceki == listebasi->onceki)printf(“”);}int main(){char      sec;char      *s; do{system(“cls”);listlist();printf(“1 – Basa Ekle2 – Sona Ekle3 -SonSec :”);sec = getche();switch (sec){case ‘1’: printf(“Adi :”);gets(s); basaekle(s);break;case ‘2’: printf(“Adi :”);gets(s);sonaekle(s);break;case ‘3’:return(0);break;}}while (1);}

İçeriği Paylaş:
İlginizi Çekebilir
Yorum Yapılmamış

Henüz Hiç Yorum Yapılmadı..

Yorum Yaz

DAİRESEL LİSTELER

Programlama 2

8/08/2016 | Yorum Yok | 54 | kucukakarsu