Top Banner

of 22

VERİ YAPILARI.pdf

Jun 02, 2018

Download

Documents

researcherr
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 8/10/2019 VER YAPILARI.pdf

    1/22

    VERYAPILARI(DATA STRUCTURES)

    DzenleyenSAM MEHMETZTRK

    KARABK NVERSTESMhendislik Fakltesi Merkez Kamps - Karabk

    HAKAN KUTUCU

  • 8/10/2019 VER YAPILARI.pdf

    2/22

    1.1GR

    zyinelemeli (rekrsif) fonksiyonlar kendi kendini aran fonksiyonlardr. Rekrsif olmayan fonksiyonlar iteratifolarak adlandrlrlar. Bunlarn ierisinde genellikle dngler(for, while gibi) kullanlr.Bir fonksiyon ya iteratiftir ya da zyinelemelidir. Rekrsif fonksiyonlar, ok byk problemleri zmek iin oproblemi ayn forma sahip daha alt problemlere blerek zme tekniidir. Fakat her problem rekrsif bir zmeuygun deildir. Problemin doas ona el vermeyebilir. Rekrsif bir zm elde etmek iin gerekli olan iki adetstrateji u ekildedir:

    1.

    Kolayca zlebilen bir taban, ba (temel durum - base case) tanmlamak,2.

    Yukardaki tanm da ieren problemi ayn formda kk alt problemlere paralayan recursive casedir.Rekrsif fonksiyonlar kendilerini arrlar. Recursive case ksmnda problem daha alt paralara blnecek veblndkten sonra hatta blnrken kendi kendini aracaktr. Temel durumda ise zm aikrdr.

    Rekrsif bir fonksiyonun genel yaps

    Her rekrsif fonksiyon mutlaka ifsegmenti iermelidir. Eer iermezse rekrsif durumla base durumu ayrtedilemez Bu segmentin ierisinde de bir base-case art olmaldr. Eer base-case durumu salanyorsa sonurekrsif bir uygulama olmakszn iteratif (zyinelemesiz) olarak hesaplanr.ayet base-case art salanmyorsa elseksmnda problem ayn formda daha kk problemlere blnr (baz durumlarda alt paralara blnemeyebilir) verekrsif (zyinelemeli) olarak problem zlr.Bir fonksiyonun zyinelemeli olmas, o fonksiyonun daha az maliyetli olduu anlamna gelmez. Bazen iteratiffonksiyonlar daha hzl ve bellei daha az kullanarak alabilirler.

    if(base case art)zyi nel emesi z ( iteratif olarak) hesapl a

    el se { / * r ecur si ve caseAyn forma sahip al t pr obl eml er e blAl t pr obl eml er i r ekr si f ol ar ak zKk zmleri birletirerek ana problemi z */

    }rnek olarak Faktryel (Factorial) problemi verilebilir.

    4! = 4. 3. 2. 1 = 244! = 4. 3! // Grld gibi ayn forma sahip daha kk probl eme3! = 3. 2! // bldk. 4ten 3e drdk ve 3! eklinde yazdk.2! = 2. 1! // Geri kalanlar da ayn ekilde alt problemlere1! = 1. 0! / / bl dk. 0! ya da 1! base- case durumuna yazlabilir.0! = 1

    Yukardaki problemi sadece nasl zeriz eklinde dnmeyip, genel yapsn dnmemiz gerekir. Matematikselolarak dnrsek problem ( 1)! eklindedir. Yapy da dnrsek,

    n! = eklinde olacaktr.1 eer n = 0n. ( n- 1) ! eer n > 0

    B L M

    1zyinelemeliFonksiyonlar

  • 8/10/2019 VER YAPILARI.pdf

    3/22

    Bu da bir temel durum ierir. Bu temel durum, eer = 0ise sonu 1dir. Deilse . ( 1)!olacaktr. imdi bunukoda dkelim;

    i nt f act ( i nt n) {i f ( n == 0)

    r et ur n 1;el se

    r et ur n n * f act( n- 1) ;

    }Fonksiyona 4 rakamn gnderdiimizi dnelim. 4 sfra eit olmadndan fonksiyon else ksmna gidecek ve4*f act ( 3) ekliyle kendini 3rakamyla tekrar aracaktr. Bu admlar aada gsterilmitir;

    4 * f act( 3)

    3 * f act( 2)

    2 * f act( 1)

    1 * f act( 0)

    (1)

    Altrma-1: Aadaki kodda rekrsif bir hesapla isimli fonksiyon tanm yaplmtr. main ierisinde de 1rakamyla hesapla fonksiyonu arlmtr. Ekran kts ne olur? Yaznz.

    #i ncl ude #i ncl ude

    voi d hesapl a( i nt x) {pri nt f ( "%d", x) ;i f ( x < 9)

    hesapl a(x + 1) ;pr i nt f ( "%d", x) ;

    }

    mai n( ){

    hesapl a( 1) ;get ch( ) ;r et ur n 0;

    }

    ekilde grld gibi en alttaki fonksiyon arsndaiteratif durum gerekletii iinfonksiyon sonlanacak ve ilk arld noktaya geri dnecektir. Bu esnada bellektef act ( 0) ars yerine 1yazlaca iin o satrdaki durum 1*1eklini alacak ve 1sonucu retilecektir. Bu sefer f act( 1) arsnn yapld yere dnecek ve yine2*1eklini alp 2 retecektir. Sonra f act( 3) arsnn olduu satrda 3*2eklinialp 6ve fact(4) arsnn yapld satra dndkten sonra da 4*6 hesaplanarak24says retilecektir. Tek satrda ifade edersek;

    r et ur n 4 * ( r et ur n 3 * ( r et ur n 2 * ( r et ur n 1 * 1) ) )r et ur n 4 * ( r et ur n 3 * ( r et ur n 2 * 1) )r et ur n 4 * ( r et ur n 3 * 2)

    r etur n 4 * 6

    r etur n 24

    i biten fonksiyon bellekten silinir.

  • 8/10/2019 VER YAPILARI.pdf

    4/22

    1.2C'DE YAPILAR

    struct: Birbirleri ile ilgili birok veriyi tek bir isim altnda toplamak iin bir yoldur. rnein programlamadillerinde reel saylar iin doubl e, tamsaylar iin i nt yaps tanmlyken, karmak saylar iin byle bir ifadeyoktur. Bu yapystruct ile oluturmak mmkndr.rnek:Bir karmak saysn ele alalm.

    = +

    real imaginary

    Yap tanmlamann birka yolu vardr. imdi bu sayy tanmlayacak bir yap oluturalm.

    st r uct compl ex {i nt r eal ;i nt i m;

    }

    Oluturduumuz bu yapdan bir nesne tanmlayalm.

    st r uct compl ex a, b;

    dediimiz zaman ave bbirer compl exsay olmulardr. Tanmlanan a ve b'nin elemanlarna ulamak iin noktaoperatr kullanrz. Eer a veya b'nin birisi ya da ikisi de pointer olarak tanmlansayd ok operatryle elemanlarnaulaacaktk.imdi bir rnek yapalm.

    a. r eal = 4; b. r eal = 6;a. i m = 7; b. i m = 9;

    imdi de hem pointer olan hem de bir nesne olan tanmlama yapalm ve elemanlarna erielim.

    st r uct compl ex obj ;st r uct compl ex *p = &obj ;p - > r eal = 7; obj . r eal = 7;p - > i m = 8; obj . i m = 8;

    Bu rnekte compl ex trnde obj isimli bir nesne ve p isimli bir pointer tanmlanmtr. pponterna ise obj nesnesinin adresi atanmtr. obj nesnesinin elemanlarna hem obj nin kendisinden, hem de ppointerndaneriilebilir. ppointerndan eriilirken ok operatr, obj nesnesinden eriilirken ise nokta operatr kullanldnadikkat ediniz. ppointerndan erimekle obj nesnesinde erimek arasnda hibir fark yoktur.

    rnek:ki karmak sayy toplayan fonksiyonu yazalm.

    st r uct compl ex {i nt r eal ;i nt i m;

    }

    st r uct compl ex add( st r uct compl ex a, st r uct compl ex b) {st r uct compl ex resul t ;

    r esul t . r eal = a. r eal + b. r eal ;resul t . i m = a. i m + b. i m;return resul t ;

    }

    Alternatif struct tanmlar

    t ypedef st r uct {i nt r eal ;i nt i m;

    } compl ex;

    compl ex a, b;

    Grld gibi bir t ypedef anahtar szcyle tanmlanan struct yapsndan hemen sonra yap ismitanmlanyor. Artk bu tanmlamadan sonra nesneleri olutururken baa struct yazmak gerekmeyecektir.

    compl ex a, b; tanmlamasyla compl extrden a ve b isimli nesne oluturmu oluruz.

  • 8/10/2019 VER YAPILARI.pdf

    5/22

  • 8/10/2019 VER YAPILARI.pdf

    6/22

    2.2BALI LSTELER (Linked Lists)

    Bal listelerin genel yaps aada verilmitir. Konu anlatlrken daima bu temel yap kullanlacandanunutmamalsnz.

    st r uct node {i nt dat a;st r uct node *next ;

    };

    Bal listeler ierisindeki dmlerin yukardaki tanmlamayla iki esinin olduu grlyor. Birinci e olandata, her trden veri ierebilir, rnein telefon numaralar, TC kimlik numaralar vb. gibi. Biz i nt trden birnesneyi yeterli bulduk. kinci e olan next , bir bal listede mutlaka bulunmas gereken bir edir. Dikkat edilirsest r uct nodetipinde bir gstericidir.

    ekil 2.1Listelerin mantksal yaps.

    Bal listelerin yapsnda bulunan node tipindeki *next gstericisi, rekrsif fonksiyonlarla kartrlmamaldr.

    Burada next , bir sonraki nodetrden dmn adresini gsterecektir.

    head

    ekil2.2Liste yaps ve bellekteki adreslerinin mantksal gsterimi.

    stteki ekilde her iftli kutucuk liste yapsn temsil etmektedir. Bu kutucuklarn stndeki numaralar ise bellektebulunduklar yerin adresidir.Burada nemli olan, next gstericisinin deerlerinin, yani dm adreslerininsralolmaydr.lk dmn adresi 100, ikincisinin 450 ve ncsnn ise 275tir. Yani bellekte neresi bosa o adresialmlardr.Oysa dizilerde tm elemanlar sral bir ekilde bellekte yer kaplyordu.

    Listenin ilk eleman genelliklehead

    olarak adlandrlr.head

    den sonra dier elemanlara erimek kolaydr.Baz kaynaklarda listenin sonundaki elemann ismi t ai l olarak adlandrlmtr. Fakat biz bu ismi kitabmzdakullanmayacaz.

    2.3

    BALI LSTE TRLER

    Tek bal listeler, ift bal listelerve dairesel bal listeler olmak zere 3 tr vardr. Bunlardan yalnzca ift ballistelerde pr evi ous adnda ikinci bir gsterici daha vardr.

    Tek bal listeler

    ekil 2.3Tek bal listeler.

    ekilde de grld gibi her bir yapnn next adnda bir adet gstericisi vardr ve son liste elemannn next iNULLdeer iermektedir.

    ift Bal (Double Linked) Listeler

    ekil 2.4ift bal listeler.

    ift bal listelerde headin pr evi ve son elemannnext i NULLdeer iermektedir.

    data next

    8 450 4 275 11 0

    100 450 275

    NULL

    data next data next data next NULL

    prev data next prev data next prev data next NULLNULL

  • 8/10/2019 VER YAPILARI.pdf

    7/22

    Dairesel Bal Listeler

    head

    ekil 2.5Dairesel bal listeler.

    Dairesel bal listenin son elemannn next i headi gstermektedir.Listelerin son elemanlar bulunmak istenirse, tek bal ve ift bal listelerde next iaretisi NULL olan

    dm, dairesel bir listede ise next iaretisi headi gsteren dm listenin son elemandr.

    2.4BALI LSTELER LE LEMLER

    Bal listeler zerinde;1- Liste oluturma,2- Listeye eleman eklemek,3- Listeden eleman silmek,4- Arama yapmak,

    5- Listenin elemanlarn yazmak,6- Listenin elemanlarn saymak.

    vb. gibi ve kukusuz daha fazla ilemler yaplabilir. imdibu ilemlerdenbazlarnfonksiyon halinde kodlayalm veaklayalm.

    Tek Bal Liste Oluturmak

    Bal listelere girite yazdmz yapy esas alarak aadaki rnei oluturabiliriz.Bu rnekte ilk olarak listeyioluturacaz, ardndan eleman ekleme yapacaz.

    mai n( ) {st r uct node *head; // henz bellekte yer kaplamyor

    head = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;/ / artk bellekte yer tahsisi edilmitir.head - > data = 1;head - > next = NULL;

    / * el eman ekl eme *// / head - > next = new node( ) ; / * C++'ta bu ekilde kullanlabilir. */head - > next = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;/ / C'de bu ekilde olmaldr.

    head - > next - > data = 3;head - > next - > next = NULL;

    }

    Peki, eleman eklemek istersek srekli olarak head- >next - >next ... diye uzayacak m? Tabi ki hayr! Elbette kibunu yapmann daha kolay bir yolu var.

    Tek Bal Listenin Bana Eleman Eklemek

    Bir fonksiyonla rnek verelim. Siz isterseniz t ypedef anahtar szcn kullanarak srekli struct yazmaktan kurtulabilirsiniz fakat biz aklda kalc olmas asndan st r uct kullanmaya devam edeceiz.

    st r uct node *addhead( st r uct node *head) {st r uct node *t emp = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;

    t emp - > dat a = 7;t emp - > next = head; // tempin nexti u anda headi gsteriyor.

    head = t emp;// head artk temp

    i n adr esi ni t ut uyor f akat i smi hal a head.r etur n head;}

    data next data next data next

  • 8/10/2019 VER YAPILARI.pdf

    8/22

    Tek Bal Listenin Sonuna Eleman Eklemek

    Listenin sonuna ekleme yapabilmek iin liste sonunu bilmemiz gerekiyor. Listede eleman olduunuvarsayyoruz. Liste sonunu bulabilmek iinse bu liste elemanlar zerinde tek tek ilerlemek gerektiinden head'inadresini kaybetmemek iin bir deiken oluturacazve headin adresini bu deikene atayacaz.

    st r uct node *addl ast ( st r uct node *head) {st r uct node *t emp = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;/ * C++' t a;* st r uct node *t emp = new node( ) ;* eklinde kullanlabileceini unutmaynz. */

    t emp - > dat a = 5;t emp - > next = NULL;

    st r uct node *t emp2 = head;whi l e( t emp2 - > next ! = NULL)

    t emp2 = t emp2 - > next ;

    t emp2 - > next = t emp;r etur n head;

    }

    Tek Bal Listenin Elemanlarn Yazdrmak

    voi d pr i nt ( st r uct node *head) {i f ( head == NULL) {

    pr i nt f ( "Li st ede el eman yok") ;r et ur n;

    }st r uct node *t emp2 = head;

    whi l e( t emp2! = NULL) { / / while iindeki koul temp2 - > next != NULL deilsepr i nt f ( "%d\ n" , t emp2 - > dat a) ;t emp2 = t emp2 - > next ;

    }}

    phesiz elemanlar yazdrmak iin zyinelemeli bir fonksiyon da kullanlabilirdi.

    voi d wr i t e( st r uct node *head) {i f ( head == NULL)

    r et ur n;

    pr i nt f ( "%d\ n", head - > dat a) ;wr i t e ( head - > next ) ;

    }

    Tek Bal Listenin Elemanlarn Saymak

    Listenin elemanlarn saymak iin i nt trden bir fonksiyon oluturmalyz.

    i nt count ( st r uct node *head) {i f ( head == NULL) {

    pr i nt f ( "Li st ede el eman yok") ;r et ur n 0;

    }i nt count er = 0;st r uct node *t emp2 = head;

    whi l e( t emp2 ! = NULL) {count er++;t emp2 = t emp2 - > next ;

    }r et ur n count er ;

    }

  • 8/10/2019 VER YAPILARI.pdf

    9/22

    Tek Bal Listelerde Verilen Bir Deere Sahip Dm Silmek

    head

    ekil 2.6Tek bal listelerin mantksal yaps.

    Tek bal listelerde verilen bir dm silme ilemi, o dmn bata ya da ortada olmasna gre farkllk gsterir.lk dm silinmek istenirse ikinci elemann adresini yani headin next iaretisinin tuttuu adresi headeatayarakbataki eleman silinebilir. Eerortadan bir dm silinmek istenirse bir nceki dm, silinmek istenendmden bir sonraki dmebalamak gerekir. imdi_r emoveismini vereceimizbu fonksiyonu yazalm.

    st r uct node *_r emove(st r uct node *head, i nt key) {st r uct node *t emp = head;

    i f ( head - > dat a == key) { // ilk dm silinecek mi diye kontrol ediliyor. head = head - > next ; // head artk bir sonraki eleman.f r ee( t emp) ;

    }

    el se i f ( t emp - > next == NULL) { // Listede tek dm bulunabilir. pr i nt f ( "Si l mek i st edi gi ni z ver i bul unmamaktadi r . \ n\ n") ;get ch( ) ;r etur n head;

    }el se {

    whi l e( t emp - > next - > dat a != key){

    i f ( t emp - > next - > next == NULL) {pr i nt f ( "Si l mek i st edi gi ni z ver i bul unmamakt adi r . \ n\ n") ;get ch( ) ;r etur n head;

    }t emp = t emp - > next ;

    }st r uct node *t emp2 = t emp - > next ;t emp - > next = t emp - > next - > next ;f r ee( t emp2) ;

    }r et ur n head;

    }

    Tek Bal Listelerde Verileri Tersten Yazdrmak

    Tek bal listenin elemanlarn tersten yazdran bir fonksiyon yazalm. Bu fonksiyonu yazarken her veriyi yenibir listenin bana ekleyeceiz ve bylece ilk listenin tersini elde etmi olacaz. Bunun iin add_head adl(addheadfonksiyonunun modifiye edilmi hali) bir fonksiyon daha yazmamzgerekir.

    st r uct node *add_head( st r uct node *head, i nt key) {st r uct node *t emp = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;

    t emp - > dat a = key;t emp - > next = head; // temp'in next'i u anda head'i gsteriyor.head = t emp; // head artk temp'in adresini tutuyor fakat ismi hala head. r etur n head;

    }

    Artk imdi tek bal liste verilerini tersten yazdran pr i nt _r ever se adl fonksiyonumuzu oluturabiliriz. Bufonksiyonda st r uct node* trden bir deiken daha tanmlayacaz ve headin elemanlarn bu yeni listeninsrekli bana ekleyerek verileri ters bir biimde sralayacaz ve yazdrma ilemini gerekletireceiz. Daha sonra

    tersten yazdrma iini rekrsif olarak yapan bir fonksiyon daha oluturacazve bu ilemin rekrsifolarak ok dahakolay bir ekilde yapldn hep birlikte greceiz. Rekrsif fonksiyonlar iyice kavramanz iin bolca rnekyapmalsnz.nk veri yaplarnda rekrsif fonksiyonlarn ok byk bir nemi vardr.

    5 next 7 next 4 next NULL8 next

  • 8/10/2019 VER YAPILARI.pdf

    10/22

    voi d pr i nt _r ever se( st r uct node *head) {

    st r uct node *head2 = NULL; // yeni listenin ban tutacak adres deikenist r uct node *t emp = head;

    whi l e( t emp != NULL) {head2 = add_head( head2, t emp - > data) ;t emp = t emp - > next ;

    }wr i t e( head2) ;

    }

    Yukarda yazm olduumuz pr i nt _r ever seisimli fonksiyonu imdi de rekrsif olarak yazalm.

    voi d wr i t e_r ever se( st r uct node *head) {st r uct node * t emp = head;

    i f ( t emp == NULL)r et ur n;

    wr i t e_r ever se( head - > next ) ;pr i nt f ( "%d\ n", head - > dat a) ;

    }

    Fonksiyonun alma biimini hatrlamak iin Blm 1.1de ki Rekrsif bir fonksiyonun genel yaps konusunuinceleyiniz.

    ift Bal (Double Linked) Listeler

    ift ballistelerin mantksal yaps ekil 2.7de gsterilmitir.Listenin ban tutan headin adresi 100dr.headin pr evgstericisi herhangi bir yeri iaret etmediinden NULLdeer iermektedir. next iaretisi ise birsonraki dmn adresi olan 200deerini iermektedir. kinci dmn pr eviaretisi headin adresi olan 100deerini tutmakta, next iaretisi ise son dmn adresi olan 150deerini tutmaktadr. Nihayet son dmnpr eviaretisi kendinden nceki dmn adresini yani 200deerinitutmakta ve next iaretisi ise herhangi birdm gstermediinden NULLdeer iermektedir.

    100 200 150

    head

    ekil 2.7ift bal listelerin mantksal yaps.

    ift Bal Liste Oluturma ve Baa Eleman Eklemek

    headdeikeninin global olarak tanmlandn varsayaraki nser t At Fi rst fonksiyonunu yazalm.

    voi d i nser t At Fi r st( i nt key) {

    i f ( head == NULL) { // liste yoksa oluturuluyor. head = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;head - > data = key;head - > next = NULL;head - > pr ev = NULL;

    }el se { // liste varsa listenin bana dm ekleniyor.

    st r uct node *t emp = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;

    t emp - > data = key;t emp - > next = head;t emp - > pr ev = NULL;head - > pr ev = t emp;

    head = t emp;}

    }

    NULL 9 200 100 24 150 200 12 NULL

  • 8/10/2019 VER YAPILARI.pdf

    11/22

    ift Bal Listenin Sonuna Eleman Eklemek

    Yine headdeikeninin global olarak tanmlandn varsayarak fonksiyonumuzu yazacaz.

    voi d i nser t At End( i nt key) {i f ( head == NULL) {

    head = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;head - > data = key;

    head - > next = NULL;head - > pr ev = NULL;

    }el se {

    st r uct node *t emp = head;st r uct node *t emp2 = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;

    whi l e( t emp - > next ! = NULL) // listenin sonunu bulmamz gerekiyor. t emp = t emp - > next ;

    t emp2 - > dat a = key;t emp2 - > next = NULL;t emp2 - > pr ev = t emp;t emp - > next = t emp2;

    }}

    ift Bal Listelerde Verilen Bir Deere Sahip Dm Silmek

    100 200 150

    head

    ekil 2.8Silinmek istenen dm sar renkte gsterilmitir.

    Daha nce anlattmz tek bal listelerde bir dm silme ilemi ile biraz farkllk gstermektedir. lk dmsilinmek istenirse ikinci elemann adresini yani headin next iaretisinin tuttuu adresi heade atadktan sonrapr ev iaretisinin deerini NULL yapmamz gerekir. Bundan sonra f ree() fonksiyonuyla bataki elemansilinebilir. Eer ortadan bir dm silinmek istenirse, silinecek dmn zerinde durup bir nceki dm,silinmek istenen dmden bir sonraki dme balamak gerekir.Silinecek dm ekil 2.8de grld gibi sarrenkli olan ortadaki dm olsun.imdi doubl e_l i nked_r emoveisminde bir fonksiyon yazarak konuyu dahaiyi kavrayalm.

    voi d doubl e_l i nked_r emove( i nt key) {st r uct node *t emp = head;

    i f ( head - > dat a == key) { // silinecek deerin ilk dmde olmas dur umu.

    head = head - > next ;head - > pr ev = NULL;f r ee( t emp) ;

    }el se {

    whi l e( t emp - > dat a != key)t emp = t emp - > next ;

    t emp - > prev - > next = t emp - > next ;

    i f ( t emp - > next ! = NULL) / / silinecek dm son dm deilset emp - > next - > prev = t emp - > prev;

    f r ee( t emp) ;}

    }

    Verilen rneklerdeki fonksiyonlar, varsaylan bir liste olduu kabul edilerek yazlmtr. Eer bu kabulmzolmasayd phesiz kontrol ifadelerini de ieren uzun kod satrlar meydana gelirdi.

    NULL 9 200 100 24 150 200 12 NULL

  • 8/10/2019 VER YAPILARI.pdf

    12/22

    Dairesel Bal Listelerde Baa Eleman Eklemek

    voi d i nser t At Fr ont ( i nt key) {i f ( head == NULL) {

    head = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;head - > data = key;head - > next = head;

    }el se {st r uct node *t emp = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;st r uct node *l ast = head;

    t emp - > data = key;

    whi l e( l ast - > next ! = head) // listenin son eleman bulunuyor. l ast = l ast - > next ;

    t emp - > next = head;l ast - > next = t emp;head = t emp;

    }}

    Dairesel Bal Listelerde Sona Eleman Eklemek

    voi d i nser t At Last ( i nt key) {i f ( head == NULL) {

    head = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;

    head - > data = key;head - > next = head;

    }el se {

    st r uct node *t emp = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;st r uct node *l ast = head;

    t emp - > data = key;

    whi l e( l ast - > next ! = head) // listenin son eleman bulunuyor. l ast = l ast - > next ;

    t emp - > next = head;l ast - > next = t emp;

    }}

    Grld gibi baa ekleme fonksiyonunun sonundaki head = t emp; deyimini kaldrmak yeterlidir. Aynfonksiyonu aadaki gibi de yazabilirdik.

    voi d i nser t At Last ( i nt key) {

    i f ( head == NULL) {head = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;

    head - > data = key;head - > next = head;

    }el se {

    st r uct node *l ast = head;

    whi l e( l ast - > next ! = head) // listenin son eleman bulunuyor. l ast = l ast - > next ;

    l ast - > next = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;l ast - > next - > next = head;

    l ast - > next - > data = key;}

    }

  • 8/10/2019 VER YAPILARI.pdf

    13/22

    ift Bal Listelerin Avantajlar ve Dezavantajlar

    Avantajlar

    Her iki ynde gezilebilir,

    Ekleme ilemi daha kolaydr.

    Dezavantajlar

    Bellekte daha fazla yer kaplar,

    Her dmn pr evve next adnda iki iaretisi olduu iin liste ilemleri daha yavatr,

    Hata olasl yksektir. rnein dmlerin pr eviaretisinin bir nceki dme balanmas yada next iaretisinin bir sonraki dme balanmas unutulabilir.

  • 8/10/2019 VER YAPILARI.pdf

    14/22

    3.1YIINLARA (Stacks) GR

    Veri yaplarnn nemli konularndan birisidir. Nesne ekleme ve karmalarnn en stten (top) yapld veriyapsna stack(yn) ad verilir.Soyut bir veri tipidir. Baz kaynaklardayt,nadirenknolarak da isimlendirilir.Bir nesne ekleneceizaman ynn en stne konulur. Bir nesne karlaca zamanda ynn en stndeki nesnekarlr. Bu karlan nesne, ynn elemanlarnn iindeki en son eklenen nesnedir. Yani bir yndakielemanlardan sadece en son eklenene eriim yaplr.Bu nedenle ynlara LIFO (Last In First Out: Son giren ilkkar) listesi de denilir. Mantksal yaps bir konteyner gibi dnlebilir.

    Stack yaplarna gerek hayattan benzetmeler yapacak olursak;-

    arjr,-

    yemekhanedeki tepsiler,-

    el feneri pilleri,-

    marketteki st ste konmu konserve kutular,-

    dar ve uzun bir kmaz sokaktaki park etmi arabalarvs.gibi son girenin ilk kt rnekler verilebilir. Bilgisayar dnyasnda nerelerde kullanldn ilerleyen sayfalardagreceiz.

    Ynlar statik veriler olabilecei gibi, dinamik veriler de olabilirler. Bir yn statik olarak tanmlanrkendizieklinde, dinamik olarak tanmlanrken ise bal liste biiminde tanmlanabilir. imdi stacklerin C programlamadilini kullanarak bilgisayarlardaki implementasyonunun nasl gerekletirildiini grelim.

    3.2STACKLERN DZ (Array) MPLEMENTASYONU

    Stacklerin bir boyutu (kapasitesi) olacandan nce bu boyutu tanmlamalyz.

    #def i ne STACK_SI ZE 4

    C derleyicilerinin #def i ne nilemci komutunu biliyor olmalsnz. C programlama dilinde # ile balayan btnsatrlar, nilemci programa verilen komutlardr (directives). stteki satr bir anlamda derleyiciye STACK_SI ZEgrdn yere4 yaz demektir. Program ierisinde dizi boyutunun belirtilmesi gereken alana bir sabit ifadesi olan 4rakamndeil STACK_SI ZEyazacaz. Byle bir tanmlama ile uzun kodlardan oluabilecek program ierisinde,

    dizi boyutunun deitirilmesi ihtiyac olduunda 4rakamn gncellemekyeterli olacaktrve programn uzun kodsatrlar arasnda dizi boyutunu tek tek deitirme zahmetinden kurtaracaktr. imdi bir stackin genel yapsntanmlayalm;

    B L M

    Ynlar(Stacks)

    4

    3

    5top

    stack

    ekil 3.1Bir stackin mantksal yaps.

    ekilde grld gibi, nesneler son giren ilkkar(LIFO)prensibine gre eklenip karlyor.

    t op isimli deiken ise en stteki nesneninindisini tutuyor.

  • 8/10/2019 VER YAPILARI.pdf

    15/22

    #def i ne STACK_SI ZE 4

    t ypedef st r uct {i nt dat a[ STACK_SI ZE] ; // ihtiyaca gre veri tr deiebiliri nt t op; /* srekli eleman ekleme ve silme ilemi yaplaca iin en stteki

    * elemann i ndi si ni t ut an top adnda bir deiken tanmladk */}st ack;

    Bu tanmlama ile meydana gelen durum aadaki ekilde grlmektedir.

    ekil 3.2LIFO ihtiyac iin kullanlacak veri yaps.

    Dikkat ederseniz t opdeikeni u an iin herhangi bir dat annindisini tutmuyor. C derleyicisi tarafndan birp deer atanm durumdadr. st acke ekleme ilemi yapan pushisimli fonksiyonumuzu yazalm.

    Stacklere Eleman Ekleme lemi (push)

    Bir stacke eleman ekleme fonksiyonu push olarak bilinir ve bu fonksiyon, stacki ve eklenecek elemanndeerini parametre olarak alr. Geri dn deeri olmayaca iin tr voi dolmaldr. Ayrca eleman ekleyebilmekiin ynn dolu olmamas gerekir.

    voi d push( st ack *st k, i nt c) {i f ( st k - > t op == STACK_SI ZE - 1) / / t op son i ndi si t ut uyor sa dol udur

    pr i nt f ( " \ nSt ack dol u\ n\ n") ;el se {

    st k - > t op ++;

    st k - > dat a[ st k - > t op] = c;}

    }

    Eleman eklendikten sonra top deikeni en son eklenen elemann indis deerini tutmaktadr.

    Bir Stackin Tm Elemanlarn Silme lemi (reset)st acki resetlemek iin t opdeikeninin deerini - 1yapmamz yeterlidir.Bu atamadan sonra t opherhangi

    bir indis deeri tutmuyor demektir. Aslnda veriler silinmedi deil mi? Bu veriler hala hafzada bir yerlerdetutuluyor. Lakin st acke hi ekleme yaplmam bile olsa bellekte yine de yer igal edecekti. Yeni eklenecekveriler ncekilerinin zerine yazlacaktr. imdi r eset ismindeki fonksiyonumuzu yazalm.

    voi d r eset ( st ack *st k) {st k - > t op = - 1;

    }

    top

    data

    4

    10top

    stack

    0

    1

    ekil 3.3t opdeikeni 1indis deerini tutuyor.

    4

    10 top 1 deerini tutuyor

    ekil 3.4St acklerde resetleme ilemi.

    0

    1

    4

    10 top = -1

    top st ackin herhangi birindis deerini tutmuyor.0

    1

  • 8/10/2019 VER YAPILARI.pdf

    16/22

    Stacklerden Eleman karma lemi (pop)

    popfonksiyonu olarak bilinir. Son giren eleman karmak demektir. karlan elemann indis deeriyle geridnecei iin fonksiyonun tipi i nt olmaldr.

    i nt pop( st ack *st k) {i f ( st k - > t op == - 1) / / st ack bos mu di ye kont r ol edi l i yor

    pr i nt f ( "St ack bos") ;el se {

    i nt x = st k - > t op- - ; / / - - operatrnn ilem srasna dikkatr et ur n x; // karlan elemann indis deeriyle geri dnyor

    }}

    el se ksm u tek satr kodla da yazlabilirdi. Fakat bu kez geri dn deerinin stackden karlan verininkendisi olduuna dikkat ediniz.

    el ser et ur n( st k - > dat a[ st k - > t op- - ] ) ;

    Aada top() ve pop( ) fonksiyonlarnn mai n( ) ierisinde ki kullanmn gryorsunuz.stackyapsnn vefonksiyon tanmlamalarnn mai n( ) blouiinde yapldn varsayyoruz.

    i nt mai n( ){i nt x;st ack n;

    r eset ( &n) ;

    push(&n, 4) ;push(&n, 2) ;push(&n, 5) ;push(&n, 7) ;push(&n, 11) ;

    x = pop( &n) ;pr i nt f ( "%d\ n", x) ;

    x = pop( &n) ;pr i nt f ( "%d\ n", x) ;

    x = pop( &n) ;pr i nt f ( "%d\ n", x) ;

    x = pop( &n) ;pr i nt f ( "%d\ n", x) ;

    x = pop( &n) ;pr i nt f ( "%d\ n", x) ;

    get ch( ) ;r et ur n 0;

    }

    Altrma-2: Yukardaki kod satrlarnda her popileminden sonra returnedilen xdeerinin son popilemindensonraki deerine olur?

    4

    10

    stk

    0

    1

    72 topNesne

    data

    ekil 3.5st knesne modeli.

  • 8/10/2019 VER YAPILARI.pdf

    17/22

    3.3STACKLERN BALI LSTE (Linked List) MPLEMENTASYONU

    Stackin bal liste uygulamasnda, elemanlar bir yapnn iinde yap iaretileriyle beraber bulunur. Mantksalyapsn daha nce grdmz bal listelerin mantksal yapsnn st ste sralanm ekli gibi dnebilirsiniz.

    Dizi uygulamasnn verdii maksimum genilik snr kontrol bu uygulamada yoktur. Tm fonksiyonlar sabitzamanda gerekleir.nk fonksiyonlarda st ackin genilii referans alnr.Hemen hemen btn fonksiyonlarngrevleri, dizi uygulamasndaki grevleriyle ayndr. Fakat iki uygulama arasndaki algoritmalar farkl olduu iinfonksiyon tanmlamalar da farkl olur.Tek bal liste kullanarak veri yapsn yazalm.

    t ypedef st r uct {st r uct node *t op;i nt cnt ;

    }st ack;

    Stackin Bo Olup Olmadnn Kontrol (isEmpty)

    Cde enumaration (numaralandrma) konusunu hatrlyor olmalsnz. Biz de ilk olarak enumaration yoluylabool eantrn tanmlyoruz.C++ta ise boolean tr ntanmldr. Ayrca tanmlamaya gerek yoktur.

    t ypedef enum {f al se, t r ue}bool ean;

    t ypedef bildiriminden sonra bool ean, yalnzca f al se ve truedeerlerini alabilen bir trn ismidir. Artkenumanahtar szc kullanlmadan direk bool ean trden tanmlamalar yaplabilir. imdi i sEmpty isimlifonksiyonu yazalm.

    bool ean i sEmpty( ) {r etur n( st k - > cnt == 0) ; / / par ant ez i er i si ndeki i f adeye di kkat

    }

    Fonksiyonun geri dn deeri tr bool ean trdr. Geri dndrlen deer sadece yanl veya doru olabilir.return parantezi ierisindeki ifade ile st k- >cnt deeri 0a eitse true, eit deil ise f al se deeri geridndrlecektir.

    Stackin Dolu Olup Olmadnn Kontrol (isFull)

    Yine geri dn deeri tr bool eantrden olan i sFul l isimli fonksiyonu tanmlyoruz.

    bool ean i sFul l ( ) {r eturn( st k - > cnt == STACK_SI ZE) ;

    }

    Geri dndrlen deer st k- >cnt deeri STACK_SI ZEa eitse true, eit deil ise f al seolacaktr.

    Stacklere Yeni Bir Dm Eklemek (push)

    Tek bal liste uygulamasnda da stacklerde ekleme ilemini yapan fonksiyon push fonksiyonu olarakbilinir. Dizi uygulamasndaki pushfonksiyonuyla baz farklarvardr. stacklerin dizi implementasyonunda diziboyutu nceden belirlenir. Dizi boyutu aldnda ise tama hatas meydana gelir. Oysa tek bal liste uygulamas

    ile oluturulan st acklerde tama hatas meydana gelmez. Aslnda bellekte bo yer olduu srece eklemeyaplabilir. Fakat st ackin soyut veri yapsndan dolaysanki bir bykl varm gibi ekleme yaplr. Yeni birdm ekleneceinden dolay fonksiyon ierisinde st r uct nodetrden bir yap oluturmak gerekecektir.

    NULL

    top

    (lk dm gsteriyor)

    listedeki elemansaysn tutuyor.

    ekil 3.6Bal liste kullanlarak gerekletirilen bir st ackin mantksal yaps.

    cnt

  • 8/10/2019 VER YAPILARI.pdf

    18/22

    voi d push( st ack *st k, i nt c) {i f ( ! i sf ul l ( st k) ) {

    st r uct node *t emp = ( st r uct node *) mal l oc( si zeof ( st r uct node) ) ;/* struct node *temp = new node(); // C++ta bu ekilde */

    t emp - > data = c;t emp - > next = st k - > t op;st k - > t op = t emp;st k - > cnt++;

    }el se

    pri nt f ( "St ack dol u\ n", c) ;}

    Grld gibi daha nce anlatlan tek bal listelerde eleman ekleme ileminden tek fark st k- >cnt++ifadesidir.Yaplan ilemleri adm adm ekillerle izelim.

    Stacklerden Bir Dm Silmek (pop)

    Yine dizi uygulamasnda olduu gibi pop fonksiyonu olarak bilinir. Silinecek dm bellee gerikazandrmak iin st r uct node trden t emp adnda bir iareti tanmlanarak silinecek dmn adresi buiaretiye atanr. t opgstericisine ise bir sonraki dmn adresi atanr ve t empdm f ree() fonksiyonuylasilinerek bellee geri kazandrlr. Eleman saysn tutan cnt deikeninin deeri de 1azaltlr. Fonksiyon silinendmn verisiyle geri dnecei iin tr i nt olmaldr.

    i nt pop( st ack *st k) {i f ( ! i sEmpt y( stk) ) { // stack bo deilse

    st r uct node *t emp = st k - > t op;st k - > t op = st k - > t op - > next ;i nt x = t emp - > dat a;f r ee( t emp) ;stk - > cnt - - ;r et ur n x;

    }}

    Fonksiyon, eer stackbo deilse dm silme ilemini gerekletiriyor ve silinen dmn verisini geridndryor. stackin bo olmas halinde fonksiyonun el seblmne ekrana uyar mesaj veren bir kod satr daeklenebilirdi.

    cnt = 2

    Adm 1:stackin balangtaki durumu.

    5 300top

    300

    180

    t opu anda 180adresini gsteriyor

    Dmlerinadresleri

    2 NULL

    5 300

    300

    180

    2 NULL

    temp

    550

    Adm 2:t empdm iin bellekte yer ayrld.

    5 300

    300

    180

    2 NULL

    c 180

    temp

    550

    Adm 3:Yeni dme veriler atand.

    5 300

    300

    180

    2 NULL

    c 180 550

    top

    top

    cnt = 2

    cnt = 2 cnt = 3

    Adm 4:t opartk listenin ban gsteriyor.

    ekil 3.7Bal liste kullanlarak oluturulmu bir st acke yeni bir dm eklemek.

    t opimdi 550adresini gsteriyor

  • 8/10/2019 VER YAPILARI.pdf

    19/22

    Stackin En stteki Verisini Bulmak (top)

    st ackbo deilse en stteki dmn verisini geri dndren bir fonksiyondur. Geri dn tr, verinintryle ayn olmaldr.

    i nt t op( st ack *st k) {i f ( ! i sEmpt y( stk))

    r et ur n( st k - > t op - > dat a) ; // En stteki elemann verisiyle geri dner}

    Bir Stacke Balang Deerlerini Vermek (initialize)

    voi d i ni t i al i ze( stack *stk) {st k - > t op = NULL;st k - > cnt = 0;

    }

    Stackler Bilgisayar Dnyasnda Nerelerde Kullanlr?

    Yn mant bilgisayar donanm ve yazlm uygulamalarnda yaygn olarak kullanlmaktadr. Bunlardanbazlar;

    -

    Rekrsif olarak tanmlanan bir fonksiyon alrken hafza kullanm bu yntem ile ele alnr,-

    ( , {, [ , ] , }, ) ayralarnn C/ C++derleyicisinin kontrollerinde,- postfix infixdntrmelerinde,

    -

    Yazlm uygulamalarndaki Parsing ve Undo ilemlerinde,- Web browserlardaki Back butonu (nceki sayfaya) uygulamasnda,

    -

    Ayrca, mikroilemcinin iyapsnda stack ad verilen zel hafza alan ile mikroilemci arasnda, bazprogram komutlar ile (push vepopgibi), bir takm ilemlerde (alt program arma ve kesmeler gibi), veritransferi gerekleir.Mikroilemcinin iinde, hafzadaki bu zel alangsterenbir yn iaretisi (Stack PointerSP) bulunur. Stack Pointer o anda bellekte allan blgenin adresini tutar. pushfonksiyonu, st acke verigndermede (yazmada), popfonksiyonu ise bu blgeden veri almada (okumada) kullanlr.

    Blm 1deki zyinelemeli Fonksiyonlar konusunda gsterilen rekrsif faktryel uygulamasnda, fonksiyonun

    kendisini her armasnda stacke ekleme yaplr. st ackin en stnde fact(0) bulunmaktadr. Fonksiyonarld yere her geri dndnde ise stackten karma ilemi yaplmaktadr.

    rnek: Anlamsz bir kod paras olsun;

    whi l e( x == 7) {pr i nt f ( "%d", a[ 2] ) ;

    }

    stteki kodlarda bulunan parantezlerin kullanmlarnn doruluu st acklerle kontrol edilir. Bunun nasl yapldalttaki ekilde admlar halinde grlyor. Bu uygulamada yukardaki kod parasnda bulunan bir parantezaldndapush( ) fonksiyonuyla stacke ekleme, kapatldnda ise pop( ) fonksiyonuyla karma yapacaz.

    (

    pushilemi popilemi

    whi l eparantezieklendi.

    whi l eparantezikartld.

    {

    pushilemi

    kme parantezieklendi.

    (

    pushilemi

    normal parantezeklendi.

    {

    [

    pushilemi

    keliparantezeklendi.

    {

    (

    (

    keliparantezkartld.

    {

    {ve }ayn snfsa

    [ve ]ayn snfsapopilemi

    normal parantezkartld.

    (ve )ayn snfsapopilemi

    {

    kme parantezikartld.

    {ve }ayn snfsapopilemi

    pop( ) ileminde karlacak parantez,kapanan parantezle uyumuyorsa hatadurumu ortaya kacaktr. Son ilemdensonra stackte eleman kalmadndan,parantezlerin doru bir ekilde kullanldgrlmektedir.

    ekil 3.8Parantez kontrolnn ekilsel gsterimi.

  • 8/10/2019 VER YAPILARI.pdf

    20/22

    3.4INFIX, PREFIX VE POSTFIX NOTASYONLARI

    Bilgisayarlarda infix yazm trnn zmlenmesi zordur. Acaba x=a/bc+d*ea*c eklindeki bir ifadeyizmlerken, ((4/2)2)+(3*3)(4*2) gibi bir ifadenin deerini hesaplarken yada a/(bc)+d*(ea)*cgibi parantezli bir ifadeyi ilerken derleyiciler sorunun stesinden nasl geliyor? 32*( 55- 32- ( 11- 4) +( 533-( 533- ( 533+( 533- ( 533+212) ) ) *21- 2) ) ) gibi birok operatr ve operand ieren bir ilemde nasl operatrnceliklerine gre ilem sralarn doru belirleyip sonu retebiliyorlar?

    Bir ifadede farkl nceliklere sahip operatrler yazlma srasyla ilenirse ifade yanl sonulandrlabilir.rnein 3+4*2ifadesi 7*2=14 ile sonulandrlabilecei gibi 3+8=11 ile de sonulandrlabilir.Bilgisayarlardainfix yazm trnn zmlenmesi zordur. Bu yzden ifadelerin operatr nceliklerine gre ayrtrlmas, ayrlanparalarn sralanmas ve bu sralamaya uyularak ilem yaplmas gerekir. Bu ilemler iin prefix ya da postfixnotasyonu kullanlr. ou derleyici, kaynak kod ierisinde infix notasyonunu kullanmaktadr ve daha sonra stackveri yapsn kullanarakprefix veya postfix notasyonuna evirir.

    Bu blmde bilgisayar alanndaki nemli konulardan biri olan infix, prefix ve postfix kavramlar zerindeduracazve bu kavramlarda st ackkullanmngreceiz.

    -

    Operatrler : +, - , / , * , ^

    -

    Operandlar : A, B, Cgibi isimler ya da saylar.

    Infix notasyonu: Ala geldiimiz ifadeler infix eklindedir. Operatrlerin ilenecek operandlar arasnayerletirildii gsterim biimidir. Bu gsterimde operatr nceliklerinin deitirilebilmesi iin parantez kullanlmasarttr. rnein infix notasyonundaki 2+4*6ifadesi 2+24=26 ile sonulanr. Ayn ifadede +operatrne ncelikverilmesi istenirse parantezler kullanlr; ( 2+4)*6. Bylece ifade 36ile sonulandrlr.

    Prefix notasyonu:Prefix notasyonunda (PN,polish notation) operatrler, operandlarndan nce yazlr.rnein 2+4*6ifadesi infix notasyonundadr ve prefix notasyonunda +2*46eklinde gsterilir. Benzerbiimde( 2+4) *6ifadesi *+246eklinde gsterilir. Grld gibiprefix notasyonunda ilem nceliklerinin salanmasiin parantezlere ihtiya duyulmamaktadr.

    Postfix notasyonu: Postfix notasyonunda (RPN, reverse polish notation) ise nce operandlar ve ardndanoperatr yerletirilir. Ayn rnek zerinden devam edersek; infix notasyonundaki 2+4*6 ifadesi prefixnotasyonunda 2 4 6 * + eklinde,benzer biimde ( 2+4) *6 ifadesi de 2 4 + 6 * eklinde gsterilir. Yineprefixte olduu gibi bu gsterimde de parantezlere ihtiya duyulmamaktadr. Baz bilgisayarlar matematiksel

    ifadeleri postfix olarak daha iyi saklayabilmektedir.

    Tm aritmetik ifadeler bu gsterimlerden birini kullanarak yazlabilir. Ancak, bir yazma (register) yn ilebirletirilmi postfix gsterimi, aritmetik ifadelerin hesaplanmasnda en verimli yoldur. Aslnda baz elektronikhesap makineleri (Hewlett-Packard gibi) kullancnn ifadeleri postfix gsteriminde girmesini ister. Bu hesapmakinelerinde biraz altrma yapldnda, iie birok parantez ieren uzun ifadeleri, terimlerin nasl gruplandnbile dnmeden, hzl bir ekilde hesaplamak mmkndr.

    lem ncelii;1-

    Parantez ii2-

    s alma3- arpma/Blme4- Toplama karma

    Ayn ncelie sahip ilemlerde srasoldan saa() dorudur. Yalnz s almada sadan soladoruilem yaplr.

    Infix Prefix Postfix

    A+B- C - +ABC AB+C-

    ( A+B) *( C- D) *+AB- CD AB+CD- *

    A- B/ ( C*D E) - A/ B*C DE ABCDE */ -

    Dikkat edilecek olunursa, postfix ile prefix ifadeler birbirinin ayna grnts deillerdir. imdi bir rnekle notasyon

    ilemlerinin st ackkullanlarak nasl gerekletirildiklerini grelim.rnek: 3 2 * 5 6 * + postfix ifadesini st ackkullanarak hesaplaynz.

    Tablo 3.1Matematiksel ifadelerde infix, prefix ve postfix notasyonunun gsterimi.

  • 8/10/2019 VER YAPILARI.pdf

    21/22

    zm algoritmas yle olmaldr;1- Bir operandla karlaldnda o operand stacke eklenir,2-

    Bir operatr ile karlaldnda ise o operatrn gerek duyduu sayda operand stackten karlr,3-

    Daha sonra pop edilen iki operanda operatr uygulanr,4-

    Bulunan sonu tekrar stacke eklenir.

    Bu admlar uygulayarak rnein zmn ekillerle aklayalm.

    Bo bir st ack. Biroperatrle karlancayakadar pushyaplacak.

    2

    3

    3 saysstackeeklendi.

    push

    stack bo

    6

    3

    push

    2says stackeeklendi.

    imdi bir operatrlekarlald iinst ackteki elemanlara2defa popilemiuygulandktan sonraoperatrle ilemesokulup sonu pushyaplacak.

    5

    6

    6

    5

    6

    push push

    pop

    arp operatrylekarlald iinst acktekielemanlara 2defapopilemiuygulandktan sonraoperatrle ileme

    sokulup sonu pushyaplacak.

    pop

    5 says stackeeklendi.

    6says stackeeklendi.

    arpm sonucuolan6 says st ackeeklendi.

    30

    6 36

    popArtk hesaplanacakbir ilem kalmad

    iin sonu ekranayazdrlabilir.

    pop

    36says st ackeeklendi.

    arpm sonucuolan30 says st ackeeklendi.

    Art operatrylekarlald iinstacktekielemanlara 2defapopilemi

    uygulandktansonra operatrleileme sokulupsonu pushyaplacak.

    push

    ekil 3.9Postfix ifadesinin st ackkullanlarak hesaplanmas.

  • 8/10/2019 VER YAPILARI.pdf

    22/22