5-bağlı listeler
TRANSCRIPT
-
7/31/2019 5-bal listeler
1/47
BALI LSTELER
-
7/31/2019 5-bal listeler
2/47
-
7/31/2019 5-bal listeler
3/47
-
7/31/2019 5-bal listeler
4/47
-
7/31/2019 5-bal listeler
5/47
Balantl Liste le glili Kavramlar
Balantl listeler zerine yaplan baz tanmlamalar yledir: Balantl Liste (Linked List): Kmeelemanlarnn birbirlerine bir balant bilgisi zerinden balanm liste yapsdr. Yaln bir dizideelemanlar birbirini izleyen srada bulunurlarken, balantl listede her elemann veri alanna ekolarak bir balant alan bulunur ve bu alanlar ard arda gelen srada olmayabilirler. Liste Uzunluu(Length of List): Listedeki kaytlarn/dmlerin saysdr. Eer elaman says sfr ise bo listeolarak adlandrlr ve karakteriyle veya {} eklinde gsterilir.Altliste (Sublist): Listenin, genelzellikleri ayn kalmak kouluyla, zerinde hareket edilebilecek belirli bir parasdr. Bo liste debir altliste olup uzunluu sfrdr.Tek Ynl Balantl Liste (One -Linked Liste): Dmler arasnda tek ynl balant vardr; listenin bandan sonuna doru hareket edilebilir. Ekleme,arama, listeleme gibi ilemlerin karmakl olur.ift Ynl Balantl Liste (Double -LinkedList): Dmler arasndaki balant ekilde a)'a grld gibi iki ynldr; bir dm hem bir sonraki hem de bir nceki dm iaret eder. Dolaysyla iki ynl hareket edilebilir. ki iaretideiken kullanlrsa, arama ve listeleme maliyetleri yine O(n) olurken ekleme maliyeti O(1) olur.evrimsel Balantl Liste (Circular Linked List): evrimsel balantl listelerde ekilde b)'degrlecei gibi dmler arasnda evrimsel bir balant vardr; eer elemanl bir balantl listedeadm hareket edilirse, yine, listenin balad noktaya dnlr. Karma Balantl Liste (HybridLinked List): Allgoritma tasarmn kolaylatrlmas amacyla, eitli balantl listelerin bir arayagetirilmesiyle oluturulan listeler karma balantl liste olarak adlandrlr. Gereksinime gre, dier balantl listelerin zellikleri alnr ve yeni bir balantl liste modeli oluturulur; baz durumlardakarma balantl liste graf veri modeline kayabilir.
-
7/31/2019 5-bal listeler
6/47
-
7/31/2019 5-bal listeler
7/47
-
7/31/2019 5-bal listeler
8/47
-
7/31/2019 5-bal listeler
9/47
Balantl liste dizi zerinde tutulacaksa enaz iki yesi olan bir topluluk bildirimiyaplmaldr; bir veri, dieri balant bilgisiiindir. Eer birden ok, rnein n taneveri varsa topluluun yesi (n+1) tane olur;iki-ynl balantl listede (n+2) tane olur.
-
7/31/2019 5-bal listeler
10/47
-
7/31/2019 5-bal listeler
11/47
-
7/31/2019 5-bal listeler
12/47
-
7/31/2019 5-bal listeler
13/47
-
7/31/2019 5-bal listeler
14/47
Ekleme lemi Listeye ekleme ileminde iki nemli nokta vardr:
eer liste bo {} ise, daha nce hibir kaytekleme yaplmamsa yaplacak ilemlerle,
listede kayt varsa yaplacak ilemler farkl olur. Aadaki kaba -koddan grlecei gibi ncelistenin durumu snanmtr; listede halhazrdaeleman varsa yeni ekleme son ile gsterilen
elemann arkasna eklenir ve son iaretisi yenieklenen eleman gsterecek biimde ayarlanr.
-
7/31/2019 5-bal listeler
15/47
-
7/31/2019 5-bal listeler
16/47
Yukardaki kaba-kodun C dilindeki karlaada verilmitir; grlecei gibi her eyden nce listenin ban gstereniaretinin NULL olup olmadnabaklyor; eer NULL'dan farkl ise, yenieklenecek olan son adl iaretinin belirttii
dme yaplr; NULL ise, liste botur veilk dm eklemesi yaplmaldr.
-
7/31/2019 5-bal listeler
17/47
-
7/31/2019 5-bal listeler
18/47
Listeleme lemi Bir balantl liste zerindeki dmlerin
ierdii bilgileri listeleme ilemi adm admyaplr; ilk nce 1. dm ierii gsterilir;daha sonra arkasndan gelen 2.dm,3.dm eklinde gider. Eer, bir dmn arka ksmnda NULL ile
karlalrsa listeleme sonlanr. Aadalisteleme iin kaba-kod grlmektedir:
-
7/31/2019 5-bal listeler
19/47
-
7/31/2019 5-bal listeler
20/47
Yukarda verilen kaba-kodun C dilindeki karlFonksiyon- 8.2.'de verilmitir; yazEkrana() adlfonksiyon bu rnek iin, dmdeki iki bilgiyi
ekrana yazan bir fonksiyondur. Fonksiyonlisteleme yaparsa 0, bo liste ise -1 gnderir. Listeleme ileminin karmakl olur; nk
herhangi bir anda tane BLISTE varsa herbirinesrayla gidilmelidir.
-
7/31/2019 5-bal listeler
21/47
Balantl listeyi listeleme ( tek ynl)
-
7/31/2019 5-bal listeler
22/47
-
7/31/2019 5-bal listeler
23/47
Balantl listede arama ( tek ynl)
-
7/31/2019 5-bal listeler
24/47
-
7/31/2019 5-bal listeler
25/47
-
7/31/2019 5-bal listeler
26/47
Yukardaki kaba-kodda grld gibi,nce silinen aranmaktadr; silinmesiistenen ve bir nceki dmn adresleribulunmakta ve silinmesi istenen aradankarlmaktadr. Dikkat edilirse silinmesiistenen halhazrda ilk dm ise ayr,
aradan bir dm ise ayr kodyrtlmektedir. Dm silindikten sonraigal ettii bellek alan serbest braklr.
-
7/31/2019 5-bal listeler
27/47
/* Listeden bir dm silme */ BLISTE *sil(int silinecek){
BLISTE *p, *bironceki;
p=ilk;bironceki=NULL;
while(p) { /* silinecek olan aranyor... */ if(silinecek==p->bilgi)break;bironceki=p;p=p->arka;
} /* silinecek listede varsa o ve bir nceki bulundu */ if(p!=NULL) {
if(bironceki==NULL) { /* silinecek olan birinci dm! */ if(ilk==son) { /* listede yalnzca 1 dm varsa */ ilk=NULL;son=NULL;
}else
ilk=ilk->arka;}
else { /* silinecek olan aradan bir dm */ bironceki->arka=p->arka;
if(bironceki->arka==NULL)son=bironceki; /*silinen son dm */
}
free(p); /* alan serbest braklyor */ return p; /* NULL'dan farkl adres gnderiliyor */
}
elsereturn NULL; /* silinmek istenen listede yok */
}
-
7/31/2019 5-bal listeler
28/47
#include #include #include
/* Listedeki dmlerin veri yaps tanmlamas */ typedef struct topluluk {int bilgi;char mesaj[100];struct topluluk *arka;}BLISTE;
/* Listenin ilk ve son dm adreslerinin tutan iaretileri */ BLISTE *ilk=NULL, *son=NULL;
/* Fonksiyon bildirimleri */ BLISTE *ara(int);BLISTE *sil(int);BLISTE *okuKlavye();void yazEkrana(BLISTE *);
-
7/31/2019 5-bal listeler
29/47
/* Ana Program*/ main(){
BLISTE *eklenecek, *ki;int bilgi, sonuc;char secim;
while(1) {puts("\nEkleme\nListeleme\nArama\nSilme\ nk\nSeiminiz?");
secim=getchar();
switch(secim) {case 'E': eklenecek=okuKlavye();
if(eklenecek!=NULL)ekle(eklenecek);
elseputs("Ekleme iin Bellek Dolu\n");
break; case 'L': sonuc=listele();
if(sonuc==- 1) puts("Bo Liste !"); break;
case 'A': puts("Aranan:"); scanf("%d", &bilgi);ki=ara(bilgi);if(ki==NULL)
puts("Aranan Bulunamad"); else
yazEkrana(ki);break;
case 'S': puts("Silinecek:"); scanf("%d", &bilgi);ki=sil(bilgi);if(ki!=NULL)
puts("Silindi...");
elseputs("Silinmek istenen yok!");break;
case '':case '':case 'c':case 'C': puts ("Hoakal!");
exit(0);default: puts("Yanl Seim!!!\n");
} /* switch'in */} /* while dngsnn */
} /* ana programn */
-
7/31/2019 5-bal listeler
30/47
/* Kayt ekleme fonksiyonu */ int ekle(BLISTE *ki){
if(ilk!=NULL) {son->arka=ki;son=ki;son->arka=NULL;
}else { /* ilk kayt ise buras yrtlr */
ilk=ki;son=ilk;ilk->arka=NULL;
}return 0;
} /* Listedeki tm kaytlar listeleme */
int listele(){
BLISTE *p; p=ilk; /* Listenin balang adresi p'ye alnyor */ if(p==NULL) return - 1; /* bo liste */
while(p) { /* NULL olana kadar dnlr */yazEkrana(p);p=p->arka;
}return 0; /* listeleme yapld anlamnda */
} /* Liste zerinde bir kayt arama */
BLISTE *ara(int aranan){
BLISTE *p;
p=ilk;while(p) {
if(p->bilgi==aranan) /* aranan m ? */ return p; /* evet ise adresini gnder */p=p- >arka; /* hayr ise bir sonrakine ge */
}
return NULL; /* bulunamam ise NULL gnder */ }
-
7/31/2019 5-bal listeler
31/47
/* Listeden bir kayt silme */ BLISTE *sil(int silinecek){
BLISTE *p, *bironceki; p=ilk;
bironceki=NULL; while(p) { /* silinecek olan aranyor... */
if(silinecek==p->bilgi)break;
bironceki=p;p=p->arka;
} /* silinecek listede varsa o ve bir nceki bulundu */ if(p!=NULL) {
if(bironceki==NULL) { /* silinecek olan birinci dm! */ if(ilk==son) { /* listede yalnzca 1 dm varsa */
ilk=NULL;son=NULL;
}else
ilk=ilk->arka;}
else { /* silinecek olan aradan bir dm */ bironceki->arka=p->arka;if(bironceki->arka==NULL)son=bironceki; /*silinen son dm */
}
free(p); /* alan serbest braklyor */ return p; /* NULL'dan farkl adres gnderiliyor */ }else
return NULL; /* silinmek istenen listede yok */}
/* Bir kayt bilgisini ekrana yazar */ void yazEkrana(BLISTE *yazilacak){
printf("bilgi:%d, mesaj:%s\n",yazilacak->bilgi, yazilacak->mesaj);}
-
7/31/2019 5-bal listeler
32/47
-
7/31/2019 5-bal listeler
33/47
Di i i d b l t l li t
-
7/31/2019 5-bal listeler
34/47
Dizi zerinde balantl listeyedm ekleme
-
7/31/2019 5-bal listeler
35/47
-
7/31/2019 5-bal listeler
36/47
Listenin ban ve sonunu tutacak ilk2 ve son2adl deikenler de aadaki gibi bildirilir.
BLISTE2 *ilk2=NULL, *son2=NULL
ki-ynl balant liste zerinde ekleme, silmegibi ilemler yaplrken hem arka hem de nbalantlar kurulmaldr. Tek ynl de yalnzcaarka balant olduu iin daha yalngerekletirilmitir. ki ynl balantda zelliklesilme ilemi kolayca yaplr. nk balantlarnkoparlp yeniden kurulmas iin, liste zerindeiki ynl hareket edilebilir.
-
7/31/2019 5-bal listeler
37/47
-
7/31/2019 5-bal listeler
38/47
ki Ynl Listeye Ekleme lemi
ki-ynl listeye ekleme yaplrken hem n hem arkada olandmlere balant kurulmaldr. Dm eklerken dikkat edilmesigereken nemli nokta ilk ekleme ileminin farkl olmasdr. Aadakiekilde ekleme ilemi ilk dm iin ve daha sonraki dmler iinayr ayr gsterilmitir. Bu ii kotaracak bir C fonksiyonu iseFonksiyon- 6.9.'da verildii gibi olabilir.
Yukardaki fonksiyon kendisine gelen adresi, eklenecek dmnbellekte tutulduu adres olarak kabul edip iki -ynl balantl listeyeekler. Grlecei gibi ilk nce liste zerinde halhazrda dm olupolmad snanmtr. Eer dm varsa hemen if deyimindensonraki satrlar, dm yok ise, bunun ilk ekleme olduuvarsaylarak else'den sonraki satrlar yrtlr
-
7/31/2019 5-bal listeler
39/47
-
7/31/2019 5-bal listeler
40/47
-
7/31/2019 5-bal listeler
41/47
ki Ynl Listede Listeleme lemi
ki ynl listede listeleme en basit ilemlerden birisidir. Listeleme ilemi en yaln ilemlerden birisidir; listenin bandan
balanarak sonuna kadar dolalarak liste zerindeki dmler listelenir. Bu ilem zaman karmakl O(n) olur.
Bu fonksiyonda ilk yaplan kontrol listenin bo olup olmadnnsnanmasdr; eer liste bo ise arana "liste bo" anlamnda -1says gnderilir. Liste bo deilse, while ile kurulan evrimin iinegirilir. Liste zerinde dolalrken de dm verileri ileme sokulur;burada dm bilgileri goster(p) adl fonksiyona gnderilmitir.Listeleme ilemi bittikten sonra, baarl oldu anlamnda 0 saysgnderilmitir.
-
7/31/2019 5-bal listeler
42/47
-
7/31/2019 5-bal listeler
43/47
ki Ynl Listede Arama lemi Arama ilemi liste bandan balanp sonuna kadar
dmler zerinde dolalarak aranan bilginin odmde olup olmadna baklr.
Arama ileminde, yapsal bakmdan listelemeye benzer;
liste bandan balanp sonuna kadar dmler zerindedolalarak aranan bilginin o dmde olup olmadnabaklr. Fonksiyon-6.9.'de arama iini kotaracak Cfonksiyonu verilmitir. Grlecei gibi while ile kurulandng ierisinde bir karlatrma yaplmakta ve
bulunursa ilgili dmn bellek adresi gnderilmektedir.Bu fonksiyon, aranan listede birka tane varsa, onlar arasndan nce olann bulur.
-
7/31/2019 5-bal listeler
44/47
-
7/31/2019 5-bal listeler
45/47
ki Ynl Listede Silme/ Listeden karma lemi
ki-yn balantl listeden dmsilme/koparma ilemi aadaki ekildegsterildii gibi yaplr. Eer koparlan ilk
dmse, listenin ban tutan ilk2 adliaretinin ierii de deitirilmelidir. Aradaki bir dmse, hemen nndeki ve arkasndaki udmlerle balants koparlmal ve daha sonra
bu iki u dm kendi aralarnda balanmaldr.
-
7/31/2019 5-bal listeler
46/47
-
7/31/2019 5-bal listeler
47/47