5-bağlı listeler

Upload: frhtngn

Post on 04-Apr-2018

231 views

Category:

Documents


0 download

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