LINK LIST
Link List pointer linklerce birlestirilmis ve nodelar diye bilinen tek gonderim yapilarinin toplulugudur.
Bir link listde yer alan listenin ilk noduna giris bir pointer araciligi ile yapilir.Takip eden nodelara giris ise her bir nodeda sakli bulunan pointer baglanti uyesi araciligi ile gerceklestirilir.
Ayrica, listenin sonunu belirtebilmek icin pointer baglantida ki en son nod NULL a kurulur.Bir nod diger structlari(yapilari) iceren herhangi bir data turunu kapsayabilir.
Stackler ve Queuelar da bir cizgisel data yapilaridir.Ama treeler(agaclar) cizgisel olmayan yapilardir.
Datalarin listeleri arrayler icinde muhafaza edilebilir ama baglanmis listeler bir cok avantaj saglarlar.Bu nedenle data listelerini arraylerde saklamaktansa linked listlerde muhafaza etmek daha dogrudur.
Baglanmis listeler dinamik olduklari icin programda istendigi zaman artirilabilir veya azantilabilirler.
Ama arraylerin buyuklukleri program icinde degistirlimeleri mumkun degildir.Baglanmis listeler yeni elemanlari listede uygun bir yere ekleyerek duzgun bir sekilde kazanilabilirler ama bu durum arraylerde mumkun degildir.
Assagida uzerinde duracagimiz program bir cok nod kullanilmis bagli listeleri nasil kullanacagimizi acik bir sekilde gostermektedir.
Burada bir listeye bilgi ekleme, cikarma ve listenin bos olup olmadigini kontrol edecegiz.Programda yer olanBos fonksiyonu programi herhangi bir seklide degistirmeyecektir.
Yapacagi gorev sadece listenin bos olup olmadigini belirtmektir.
Liste bos ise geriye donus deger 1, degilse 0 dir.Fonksiyon ListeYaz listede ki bilgileri yazacaktir.
Hadi bakalim programi yavas yavas yazalim.DIKKAT Ben bu programi derlemedim ve internet ortamina aktarirken hata yapmis olabilirim.
/*Bir liste kazanma*/
#include <stdio.h>
#include <stdlib.h>
struct listNode {
char data;
struct listNode *sonraki;
};
typedef struct listNode LISTNODE;
typedef LISTNODE *LISTNODEPTR;
void Ekle(LISTNODEPTR *, char);
char Sil(LISTNODEPTR *, char);
int Bos(LISTNODEPTR);
void ListeYaz(LISTNODEPTR);
void Yonergeler(void); /*menude ki kullanici tesvikleri*/
main()
{
LISTNODEPTR baslat = NULL;
int secenek;
char madde;
Yonergeler(); /*Menuyu goruntule*/
printf(" ? "); /*yazimdan emin olma*/
scanf("%d", &secenek);
while(secenek !=
3) /* != degilse demektir*/
{
switch(secenek)
{
case 1:
printf("Bir karakter gir: ");
scanf("\n%c", &madde);
Ekle(&baslat, madde);
ListeYaz(baslat);
break;
case
2:
if(!Bos(baslat))
{
printf("Silmek icin bir karakter gir :");
scanf("\n%c", &madde);
if(Sil(&baslat, madde))
{
printf("%c silindi.\n", madde);
ListeYaz(baslat);
}
else
printf("%c bulunmadi.\n\n", madde);
}/*ilk if bitis*/
else
printf("Liste Bos.\n\n");
break;
default:
printf("Gecersiz Secenek.\n\n");
Yonergeler();
break;
}
printf("?");
scanf("%d", &secenek);
}
printf("Program Sonu.\n");
return (0);
}
Programin Devami Icin Tiklayin
|