Data Structures 3e

Embed Size (px)

Citation preview

  • 8/8/2019 Data Structures 3e

    1/93

    Y. Do. Dr. Aybars UUR

    T.C.EGE NVERSTES

    MHENDSLK FAKLTESBLGSAYAR MHENDSL BLM

    VER YAPILARIDERS NOTLARI

    (THIRD EDITION)

    Y. Do. Dr. Aybars UUR

    Copyright 2005, 2003, 2002, 1999

    Eyll, 2005ZMR

  • 8/8/2019 Data Structures 3e

    2/93

    VER YAPILARI NDEKLER

    Y. Do. Dr. Aybars UUR

    NDEKLER

    1. VER YAPILARI GR ...................................................................... 12. JAVA PROGRAMLAMA ....................................................................... 2

    3. ZYNELEME (RECURSION) ........................................................... 224. AALAR (TREES) ............................................................................. 345. YIIT (STACK)..................................................................................... 436. KUYRUKLAR (QUEUES).................................................................... 517. LSTELER ve BALI LSTELER (LINKED LISTS) ........................ 548. ALGORTMALARIN KARILATIRILMASI.................................. 619. SIRALAMA............................................................................................ 6610. ZGELER (GRAPHS) ve UYGULAMALARI................................ 72EK 1 : JAVA'DA HAZIR VER YAPILARI ve KOLEKSYONLAR... 75EK 2 : C# (C SHARP) PROGRAMLAMA .............................................. 79

  • 8/8/2019 Data Structures 3e

    3/93

    VER YAPILARI Giri

    Y. Do. Dr. Aybars UUR 1

    BLM 1VER YAPILARI GR

    Algoritma : Bir problemin zmnde kullanlan komutlar dizisi. Bir problemizmek iin gelitirilmi kesin bir yntemdir. Bir algoritma, bir programlama

    dilinde (Java, C, Pascal gibi) ifade edildiinde program adn alr.

    Veri : Algoritmalar tarafndan ilenen en temel elemanlar ( saysal bilgiler,metinsel bilgiler, resimler, sesler ve girdi, kt olarak veya ara hesaplamalardakullanlan dier bilgiler ... ). Bir algoritmann etkin, anlalr ve doru olabilmesiiin, algoritmann ileyecei verilerin dzenlenmesi gerekir.

    Veri Yaplar : Verilerin dzenlenme biimini belirleyen yaptalardr. Birprogram deikeni bile basit bir veri yaps olarak kabul edilebilir. Deiikalgoritmalarda verilerin diziler, ytlar, kuyruklar, aalar ve izgeler gibi veri

    yaplar eklinde dzenlenmesi gerekebilir.

    Veri, Yap ve AlgoritmaBir programda veri, yap ve algoritma birbirinden ayrlmaz bileenlerdir ve herbiri nemlidir. Verilerin dzenlenme biimleri nemlidir. nk, yap iyitasarlandnda, etkin, doru, anlalr ve hzl alp az kaynak kullananalgoritma gelitirmek kolaylar.

    Veri Tiplerinden Veri Yaplarna Veri Tipleri : Tamsay, Gerel Say, Karakter ...

    Bileik Veri Tipleri : Dizi, Yap (kayt), ... Veri Yaplar : Liste, Yt, Kuyruk, Aa, izge, ...

    Veri Yaplar (Tekrar)Liste : Sonlu sayda elemandan oluan ve elemanlar dorusal sradayerletirilmi veri yaps. Herhangi bir elemanna eriimde snrlama yoktur.Yt : Elemanlarna eriim snrlamas olan, liste uyarl veri yaps. LIFO listesi.Kuyruk : Elemanlarna eriim snrlamas olan, liste uyarl veri yaps. FIFOlistesi.

    Veri Taban (Database) : Ksaca, ilenecek ve ilenmi verilerden oluan bilgibankas olarak tanmlanabilir. Veri yaplar yani verilerin dzenlenme biimleriveri tabanlarn (database) iin de nemlidir. rnek olarak, bir bankadakimterilerin bilgileri, bir niversite retim elemanlarna, alanlarna, derslereilikin bilgiler, veri tabanlarnda tutulup ilenir.

    Veri Yaplar : Statik Veri Yaplar ve Dinamik Veri Yaplar

  • 8/8/2019 Data Structures 3e

    4/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 2

    BLM 2JAVA PROGRAMLAMA

    Basit bir Java program :

    Programn Yazlmas ve Derlenmesi :

    Herhangi bir ASCII metin editr ile Ornek1.javaprogramnn yazlmas

    Ornek1.java programnn Java compiler ilederlenerek Java yorumlaycsnn anlayaca bytecodelara evrilmesi yani Ornek1.class dosyasnnoluturulmas

    javac Ornek1.java komutu ile

    javacOrnek1.java Ornek1.class

    Programn altrlmas :

    "Java Ornek1" komutu ile uygulama altrlr.

    Ekran kts :

    Merhaba

    // Ekrana, Merhaba yazdran Java Program// Ornek1.javapublic class Ornek1{public static void main(String args[]){System.out.println("Merhaba");

    }

    }

  • 8/8/2019 Data Structures 3e

    5/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 3

    BLM 2.1JAVA PROGRAMLAMA I

    Deiken Tanmlama, Aritmetik lemler, String'ler,I/O lemleri, Metotlar, Diziler (Array), Denetim

    Yaplar (if, for, while, ...), GUI ...

    ki tamsayy toplayan metot :

    class Topla{public static void main(String args[]){

    System.out.println(topla(5,6));

    }

    public static int topla(int sayi1,int sayi2){

    return sayi1+sayi2;}

    }

  • 8/8/2019 Data Structures 3e

    6/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 4

    rnek 2.1 : Tamsay, Dng, Dizi, Metot ve Ekrana Yazdrma

    int dizi[] = { 5,6,7,8 }; veya benzer ekilde verilen bir tamsay dizisinin elemanlarnntoplamn bulan metodu ieren java programn yaznz.

    class DiziTopla{

    public static void main(String args[]){int dizi[] = { 5,6,7,8 };System.out.println(topla(dizi));

    }

    public static int topla(int dizi[]){int toplam = 0;for(int i=0; i

  • 8/8/2019 Data Structures 3e

    7/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 5

    rnek 2.3 : if, if else

    Verilen bir kii adn bir dizide arayan ve bulunup bulunamadn belirten Javametodunu yaznz. Aranan kiinin String aranan = "Ali" eklinde verildiinivarsayabilirsiniz.

    class DiziArama{

    public static void main(String args[]){String strDizi[] ={"Ali", "Zekiye", "Cemil", "Kemal"};

    String kelime = "Cemil";if (ara(strDizi,kelime))

    System.out.println(kelime+" Dizide Bulundu");else

    System.out.println(kelime+" Dizide Bulunamad");

    kelime = "Ylmaz";if (ara(strDizi,kelime))

    System.out.println(kelime+" Dizide Bulundu");elseSystem.out.println(kelime+" Dizide Bulunamad");

    }

    public static boolean ara(String dizi[], String aranan){

    for(int i=0; i

  • 8/8/2019 Data Structures 3e

    8/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 6

    public class DiziElemanEkle extends Applet{String strDizi[];int elemanSayac = 0;

    public void init()

    {strDizi = new String[10];

    elemanEkle("Ali");elemanEkle("Cemil");listele();

    }

    public void elemanEkle(String yeniEleman){strDizi[elemanSayac]=yeniEleman;

    elemanSayac++;}

    public void listele(){ for(int i=0; i

  • 8/8/2019 Data Structures 3e

    9/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 7

    rnek 2.6 : Stringler ve Karakter Dizileri Fark

    public class Ornek06{

    public static void main(String args[]){char charArray[] = { 'M','e','r','h','a',b',a' };String s = new String("Merhaba");String s1,s2;

    s1 = new String(s);s2 = new String(s);

    System.out.println("s1="+s1+" "+"s2="+s2+"\n");

    if(s1.equals(s2))System.out.println("Her iki string esit");

    System.out.println("Uzunluklar :");System.out.println("Karakter dizisi+charArray.length+" karakter");

    System.out.println("s1 "+s1.length()+" karakter");System.out.println("s2 "+s2.length()+" karakter");

    }}

    Ekran kts :

    s1=Merhaba s2=Merhaba

    Her iki string esitUzunluklar :Karakter dizisi 7 karakters1 7 karakters2 7 karakter

  • 8/8/2019 Data Structures 3e

    10/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 8

    rnek 2.7 : Baz String lemleri

    public class Ornek07{public static void main(String args[]){

    String s=new String("abcdefghijklmnopqrstuvwxyzabcde");

    // e harfinin alfabedeki konumuSystem.out.println(s.indexOf('e'));// e harfinin 20. karakterden sonra konumuSystem.out.println(s.indexOf('e',20));// 5. karakterden 10. karaktere kadar olan string// parasSystem.out.println(s.substring(5,10));// String birletirmeSystem.out.println(s.concat("ABCDEFG"));

    // String atamas = "Merhaba"; System.out.println(s);

    }}

    Ekran kts :430fghijabcdefghijklmnopqrstuvwxyzabcdeABCDEFG

    Merhaba

    BAST ALITIRMALAR

    1) Verilen bir ismin, bir String dizisindeki kanc eleman olduunu bulan programyaznz.

    2) Verilen bir ismin, bir String dizisinde ka kere tekrarlandn bulan programyaznz.

    3) Bir tamsay dizisinde, belirtilen bir saydan kk ka tane say olduunu bulanprogram yaznz.

    4) Sral bir tamsay dizisinden, verilen bir sayy silen metodu yaznz.5) Sral bir diziye, verilen bir sayy ekleyen metodu yaznz.6) Parametre olarak gnderilen iki tane matrisi toplayarak nc matrisi elde eden

    metodu yaznz.7) Bir matrisin satrlar toplamn bir diziye aktaran metodu yaznz.8) "Random" saylardan oluturduunuz 10 elemanl bir dizinin ift numaral

    elemanlarn bir matrisin ilk satrna, tek numaral elemanlarn ikinci satrnayerletiren Java metodunu yaznz.

  • 8/8/2019 Data Structures 3e

    11/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 9

    Mesaj ve Girdi Kutular Kullanm

    rnek 1 :Kullancdan iki tamsay isteyerek bunlarn toplamn, arpmn, farkn, blmn veblmnden kalann bulup sonular yazdran Java program.

    import javax.swing.JOptionPane;

    public class Ornek1{public static void main(String args[]){String sayi1, sayi2;int tamsayi1, tamsayi2, toplam, carpim, fark, kalan;float bolum;

    sayi1=JOptionPane.showInputDialog("1.sayiyi veriniz");sayi2=JOptionPane.showInputDialog("2.sayiyi veriniz");

    tamsayi1 = Integer.parseInt(sayi1);tamsayi2 = Integer.parseInt(sayi2);

    toplam = tamsayi1+tamsayi2;carpim = tamsayi1*tamsayi2;fark = tamsayi1-tamsayi2; bolum = tamsayi1/tamsayi2;kalan = tamsayi1%tamsayi2;

    JOptionPane.showMessageDialog(null,"Toplam = "+toplam+"\nCarpim = "+carpim+"\nFark = "+fark+

    "\nTamsayi Bolum = "+bolum+"\nKalan = "+kalan+"\nBolum = "+(float)tamsayi1/tamsayi2,

    "Sonuclar",JOptionPane.PLAIN_MESSAGE);System.exit(0);

    }}

    Ekran kts : (Metin kutularna 1. say iin 15, 2. sayiin 4 deerleri girildiinde oluacak sonular)

  • 8/8/2019 Data Structures 3e

    12/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 10

    rnek 2 : Not ortalamasn bulan Java program (-1 deeri girilene kadar notlarokur).

    import javax.swing.JOptionPane;

    public class Ornek2

    {public static void main(String args[]){float ortalama;int sayac=0, notu, toplam=0;

    String notStr =JOptionPane.showInputDialog("Notu giriniz (Exit : -1)");

    notu = Integer.parseInt(notStr);

    while(notu!=-1) {

    toplam += notu; ++sayac;notStr =JOptionPane.showInputDialog("Notu giriniz (Exit : -1)");

    notu = Integer.parseInt(notStr);};

    String s;if (sayac==0) s = "Not girilmedi!";

    else s = "Sinif ort. = "+(float)toplam/sayac;

    JOptionPane.showMessageDialog(null,s,"Sonuclar",JOptionPane.PLAIN_MESSAGE);

    System.exit(0);}

    }

  • 8/8/2019 Data Structures 3e

    13/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 11

    Dier Bir GUI Bileeni (JTextArea)

    rnek 3 : "Random" saylar (random.java)Alt yzl bir zarn 1000 kere atlmas sonucu her bir yzn kaar kere geldiinibularak listeleyen Java Program.

    import javax.swing.*;

    public class random{

    public static void main(String args[]){

    int[] frekans; frekans = new int[6];for (int tekrar=0; tekrar

  • 8/8/2019 Data Structures 3e

    14/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 12

    Applet Kullanm

    rnek 4 : APPLET ve JTextAreakare metodu yardm ile, 1'den 10'a kadar olan saylarn karesini bulup ekranayazdran Java program.

    import java.awt.*;import javax.swing.*;

    public class Ornek10 extends JApplet{JTextArea listelemeAlani;

    public void init(){listelemeAlani = new JTextArea();

    Container c = getContentPane();c.add(listelemeAlani);

    listelemeAlani.append("n"+"\t"+"kare(n)\n");

    for(int i=0; i

  • 8/8/2019 Data Structures 3e

    15/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 13

    rnek 5 : SralamaSaylar kkten bye doru sralayan Java program (Bubble Sort)

    import java.awt.*;import javax.swing.*;

    public class Ornek05 extends JApplet{JTextArea listelemeAlani;

    public void init(){listelemeAlani = new JTextArea();

    Container c = getContentPane();c.add(listelemeAlani);

    int a[] = { 2,6,4,8,10,12,89,68,45,37 };

    // Sralama ileminden nce saylarn yazdrlmasString metin = "Before sorting :\n";for(int i=0; i

  • 8/8/2019 Data Structures 3e

    16/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 14

    BLM 2.2JAVA PROGRAMLAMA II

    NESNEYE YNELK PROGRAMLAMA(OBJECT ORIENTED PROGRAMMING)

    JAVA'da SINIFLAR

    rnek 1 : Bir Yolcu snf, yolcu1 nesnesioluturulmas ve kullanlmas.

    class Yolcu {

    String ad;String soyad;int yasi;

    Yolcu() { };

    Yolcu(String ad, String soyad){

    this.ad = ad; this.soyad = soyad;}

    public void yazdir(){

    System.out.println("Ad : "+ad);System.out.println("Soyad : "+soyad);

    }

    }

    class Ornek_Class {public static void main(String args[]){

    Yolcu yolcu1 = new Yolcu("Ali","Yilmaz");

    yolcu1.yazdir();}

    }

  • 8/8/2019 Data Structures 3e

    17/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 15

    TEMEL BLG ve TERMNOLOJ

    Snf (Class) : Soyut bir veri tipinin hem verilen tiplerdeki veriler kmesini,

    hem de bu deerler zerinde yaplabilecek ilemler kmesini bir araya getirir.rnek : "Yolcu" snf.

    Nesne (Object) : Snf tipindeki deikenlere nesne ad verilir.rnek : "yolcu1" nesnesi.

    Metot (Method) : Bir eylemi veya ilemi gerekletiren snf yesidir."Yolcu()" yapc metotlar ve "yazdir()" metodu "Yolcu" snfnn metotlardr.

    Snf yeleri (Class Members) : Snfn elemanlarna ye ad verilir.

    Deikenler, metotlar ...rnekler : "ad", "soyad", "yasi" deikenleri; "Yolcu()" yapc metotlar ve"yazdir()" metodu "Yolcu" snfnn yeleridir.

    Yapc metot (Constructor) : Snftan yeni bir nesne yaratld anda arlanmetoda yapc metot ad verilir. Yapc metot ismi, snf ismi ile ayndr.

    Yolcu yolcu1 = new Yolcu("Ali","Yilmaz");"yolcu1" nesnesi "new" deyimi ile oluturulurken "Yolcu" snfnn iki tane"String" parametre alan yapc metodu devreye girer.

    // Yapc metotYolcu(String ad, String soyad){this.ad = ad; this.soyad = soyad;

    }

  • 8/8/2019 Data Structures 3e

    18/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 16

    JAVA'DA VEKTRLER

    JAVA RNEK 1 : Bir vektr oluturarak srayla "Ali", "Cemil", "Kemal" isimleriniekleyiniz. Vektr iki ekilde dolaarak (for, enum) isimleri ekrana listeleyiniz.

    import java.util.*;

    class Vektor1{public static void main(String args[]){final Vector v = new Vector(1);

    v.addElement("Ali");v.addElement("Cemil");v.addElement("Kemal");

    for(int i=0; i

  • 8/8/2019 Data Structures 3e

    19/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 17

    class Vektor2{public static void main(String args[]){final Vector v = new Vector(1);

    Yolcu y1 = new Yolcu("Ali",25);v.addElement(y1);Yolcu y2 = new Yolcu("Zekiye",15);v.addElement(y2);

    for(int i=0; i

  • 8/8/2019 Data Structures 3e

    20/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 18

    JAVA RNEK 3 (vektor.java) : Vektrler

    import java.util.*;import java.awt.*;import java.awt.event.*;

    import javax.swing.*;

    public class vektor extends JFrame{int yer = -1;

    public vektor(){

    super("Vektor Ornek");Container c = getContentPane();c.setLayout(new FlowLayout());

    final Vector v = new Vector(1);

    final JTextField tf = new JTextField(10);c.add(tf);

    final JButton sonraki = new JButton("sonraki");sonraki.addActionListener(new ActionListener()

    {public void actionPerformed(ActionEvent e){//tf.setText((v.firstElement()).toString());

    if (yer

  • 8/8/2019 Data Structures 3e

    21/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 19

    public static void main ( String args[] ){

    vektor app = new vektor();

    app.addWindowListener

    ( new WindowAdapter(){public void windowClosing(WindowEvent e){

    System.exit(0);}

    });

    }}

    ekil 1 : Vektr programnn penceresi

  • 8/8/2019 Data Structures 3e

    22/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 20

    JAVA RNEK 4 (telefon.java) : GUI Components

    import java.awt.*;import java.awt.event.*;import javax.swing.*;

    public class telefon extends JFrame implementsActionListener

    {public Container c;private String names[] = { "1", "2", "3", "4", "5",

    "6", "7", "8", "9" };private JButton b[];private GridLayout grid1;private JTextField tf1;

    public telefon(){super("telefon");

    grid1 = new GridLayout(3,4);

    c = getContentPane();c.setLayout(new BorderLayout());

    b = new JButton[names.length];

    JPanel p1 = new JPanel();for(int i=0; i

  • 8/8/2019 Data Structures 3e

    23/93

    VER YAPILARI Blm 2 : Java Programlama

    Y. Do. Dr. Aybars UUR 21

    public void actionPerformed(ActionEvent e){if(e.getSource()==b[0])

    tf1.setText(tf1.getText()+"1");elseif(e.getSource()==b[1])

    tf1.setText(tf1.getText()+"2");elseif(e.getSource()==b[2])

    tf1.setText(tf1.getText()+"3");}

    public static void main(String args[]){telefon app = new telefon();app.addWindowListener(new WindowAdapter() {

    public void windowClosing(WindowEvent e){

    System.exit(0);}

    });

    }}

  • 8/8/2019 Data Structures 3e

    24/93

    VER YAPILARI Blm 3 : zyineleme

    Y. Do. Dr. Aybars UUR 22

    BLM 3ZYNELEME (RECURSION)

    3.1 Giri

    Kendini dorudan veya dolayl olarak aran fonksiyonlara zyineli (recursive)fonksiyonlar ad verilir. zyineleme (recursion), iterasyonun (dngler, tekrar)yerine geebilecek ok gl bir programlama tekniidir. Orijinal probleminkk paralarn zmek iin, bir alt programn kendi kendini armasnsalayarak, tekrarl ilemlerin zmne farkl bir bak as getirir. Yenibalayan programclara, bir fonksiyon iinde atama deyiminin sandafonksiyon isminin kullanlmamas gerektii sylenmekle birlikte, zyineliprogramlamada fonksiyon ismi dorudan veya dolayl olarak fonksiyon iindekullanlr.

    3.2rnekler

    3.2.1 Faktryel Fonksiyonu

    Faktryel fonksiyonunun matematik ve istatistik alannda nemi byktr.Verilen pozitif bir n tamsays iin n faktryel, n! eklinde gsterilir ve n ile 1arasndaki tm tamsaylarn arpmna eittir.

    rnekler :

    0! = 11! = 15! = 5 * 4 * 3 * 2 * 1 = 120

    Faktryel fonksiyonunun tanm (definition of factorial function) :n! = 1 if n==0n! = n * (n-1) * (n-2) * ... * 1 if n>0

    n tamsaysn alp n faktryelin deerini dndren bir algoritmay u ekildeoluturabiliriz :

    prod = 1;for(x=n; x>0; x--)prod *= x;

    return prod;

  • 8/8/2019 Data Structures 3e

    25/93

    VER YAPILARI Blm 3 : zyineleme

    Y. Do. Dr. Aybars UUR 23

    Byle bir algoritma tekrarl (iterative) bir algoritmadr. nk, belirli bir artgerekleinceye kadar sren belirgin bir dng veya tekrar vardr.

    Faktryel fonksiyonunun dier bir tanm :n! = 1 if n==0

    n! = n * (n-1)! if n>0

    Bu, faktryel fonksiyonunun kendi terimleri cinsinden tanmlanmasdr. Bylebir tanmlama, bir nesneyi kendi cinsinden daha basit olarak ifade etmesindendolay zyineli tanmlama olarak adlandrlr.

    rnek :3! = 3 * 2! = 3 * 2 * 1! = 3 * 2 * 1 * 0!

    = 3 * 2 * 1 * 1= 3 * 2 * 1

    = 3 * 2= 6

    /* n! deerini hesaplayan C fonksiyonu */

    Bu fonksiyonlar dier bir fonksiyondan printf(%d, fact(3)); eklindearlabilir.

    Recursiveint fact(int n){

    int x,y;if (n==0) return(1);

    x = n-1;y = fact(x); /*Kendini aryor*/return (n*y);

    }

    Iterativeint fact(int n){int x, prod;prod = 1;

    for(x=n; x>0; x--)prod *= x;

    return (prod);}

    n=3int fact(int n){

    int x,y;if (n==0) return(1);x = n-1;y = fact(x);return (n*y);

    }

    n=2int fact(int n){

    int x,y;if (n==0) return(1);x = n-1;y = fact(x);return (n*y);

    }

    n=1int fact(int n){

    int x,y;if (n==0) return(1);x = n-1;y = fact(x);return (n*y);

    }

    n=0int fact(int n){int x,y;if (n==0) return(1);x = n-1;y = fact(x);return (n*y);

    }

    y=fact(2) y=fact(1) y=fact(0)

    Base (Simplest) Case

  • 8/8/2019 Data Structures 3e

    26/93

    VER YAPILARI Blm 3 : zyineleme

    Y. Do. Dr. Aybars UUR 24

    Bellek Grnm :

    Fonksiyon zyineli olarak her arlnda yereldeikenler ve parametreler iin bellekten yer ayrlr.Her fonksiyondan kta ise ilgili fonksiyonun (en sonarlan) deikenleri iin bellekten ayrlan yerlerserbest braklr ve bir nceki kopya yenidenetkinletirilir. C bu ilemi yt (stack) kullanarakgerekletirir. Her fonksiyon arlnda fonksiyonundeikenleri ytn en stne konulur. Fonksiyondankldnda ise en son eklenen eleman karlr.Herhangi bir anda fonksiyonlarn bellekte bulunankopyalarn parametre deerleri ile birlikte grmek iinDebug - Call Stack seenei kullanlr (BorlandC 3.0).

    zyineli fonksiyonun her arlnda bellekte x ve y deikenleri iin yerayrlmas istenmiyorsa fonksiyon ksaltlabilir :

    int fact(int n){

    return ( (n==0) ? 1 : n * fact(n-1) );}

    Hata durumlar da kontrol edilmelidir. fact(-1) gibi bir fonksiyon armnda nazaldka azalacaktr ve programn sonlandrma koulu olan n == 0 durumuolumayacaktr. Bir fonksiyon kendisini sonsuza kadar armamaldr. Bunuengellemek iin fonksiyon biraz deitirilebilir :

    int fact(int n){

    if(n

  • 8/8/2019 Data Structures 3e

    27/93

    VER YAPILARI Blm 3 : zyineleme

    Y. Do. Dr. Aybars UUR 25

    3.2.2 Fibonacci Dizisi (Fibonacci Sequence)

    Fibonacci dizisi, her eleman kendinden nceki iki elemann toplam eklindeifade edilen dizidir :

    0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

    0. eleman : 01. eleman : 12. eleman : 0+1 = 13. eleman : 1+1 = 24. eleman : 1+2 = 35. eleman : 2+3 = 5................................

    Fibonacci dizisinin tanm :

    fib(n) = n if n==0 or n==1fib(n) = fib(n-2) + fib(n-1) if(n>=2)

    rnek hesaplama :

    fib(4) = fib(2) + fib(3)= fib(0) + fib(1) + fib(1) + fib(2)

    = 0 + 1 + 1 + fib(0) + fib(1)= 2 + 0 + 1= 3

    Fibonacci dizisinin n. elemannn deerini bulan C fonksiyonu :

    int fib(int n){

    int x, y;if(n22 1 fib(0)1 return(0)->22 1 0 return(1)->33 1 fib(1)1 return(1)->33 2 1 return(3)->

  • 8/8/2019 Data Structures 3e

    28/93

    VER YAPILARI Blm 3 : zyineleme

    Y. Do. Dr. Aybars UUR 26

    3.2.3 kili Arama (Binary Search)

    zyineleme sadece matematiksel fonksiyonlarn tanmlamasnda kullanlanbaarl bir ara deildir. Arama gibi hesaplama etkinliklerinde de oldukakullanldr. Belirli bir saydaki eleman ierisinde belli bir eleman bulmaya

    alma ilemine arama ad verilir. Elemanlarn sralanmas arama ileminikolaylatrr. kili arama da sralanm elemanlar zerinde gerekletirilir. Birdizinin iki paraya blnmesi ve uygun parada ayn ilemin srdrlmesi ileyaplan arama ilemidir. Telefon rehberinin ortasn ap, soyadna gre nce iseilk yarda, sonra ise ikinci yarda ayn ilemi tekrarlama yolu ile arama, telefonrehberindeki batan itibaren sona doru sra ile herkese bakmaktan ok dahaetkindir.

    int binsrch(int a[], int x, int low, int high){

    int mid;if(low>high)return(-1);

    mid=(low+high)/2;return(x==a[mid] ? mid : x 17>5

    binsrch(a,17,4,7);mid = (4+7)/2 = 5.elemana[mid] = 18 => 17 17==17return(4); // Bulundua ve x global deiken olarak tanmlanrsa fonksiyon ve arm u ekildeolacaktr :

  • 8/8/2019 Data Structures 3e

    29/93

    VER YAPILARI Blm 3 : zyineleme

    Y. Do. Dr. Aybars UUR 27

    int binsrch(int low, int high){

    int mid;if(low>high)

    return(-1);

    mid=(low+high)/2;return(x==a[mid] ? mid : x

  • 8/8/2019 Data Structures 3e

    30/93

    VER YAPILARI Blm 3 : zyineleme

    Y. Do. Dr. Aybars UUR 28

    Hanoi Towers Probleminin zm ve C Program Haline Getirilmesi:

    nce n disk iin dnelim. 1 disk olursa, dorudan Adan Cye konulabilir (Dorudan grlyor). (n-1) disk cinsinden zm retebilirsek zyinelemeden yararlanarak n disk

    iin de zm bulabiliriz. 4 diskli bir sistemde, kurallara gre en stteki 3 diski Bye yerletirebilirsek

    zm kolaylar.

    Genelletirirsek :1. n==1 => Adan Cye diski koy ve bitir.2. En stteki n-1 diski Adan Cden yararlanarak Bye aktar.3. Kalan diski Adan Cye koy.4. Kalan n-1 diski Adan yararlanarak Bden Cye koy.

    Problem deyimi : Hanoi Probleminin zmProblem u an tam olarak tanml deil, problem deyimi yeterli deil.Bir diskin bir kuleden dierine tanmasn bilgisayarda nasl temsil edeceiz?Programn Girdileri nelerdir? ktlar nelerdir? belli deil.

    Girdi/kt tasarm herhangi bir problemin zmnn programnalgoritmasnn oluturulmasnda nemli yer tutar. Oluturulacak algoritmannyaps da byk lde girdi ve ktlara bal olacaktr. Uygun girdi ve kttasarm, algoritmalarn gelitirilmesini kolaylatrabilir ve etkinlik salar.

    Girdi : disk says : nkuleler : A, B, C (uygun)

    kt :disk nnni, yyy kulesinden alp zzz kulesine yerletir.nnn : disk numaras. En kk disk 1 numara (en kk say olmas

    dorudan)yyy ve zzz de kule ad.

    Ana programdan towers fonksiyonunun arlmas :void main(){

    int n;scanf(%d,&n);towers(parameters);

    }

  • 8/8/2019 Data Structures 3e

    31/93

    VER YAPILARI Blm 3 : zyineleme

    Y. Do. Dr. Aybars UUR 29

    imdi parametreleri belirleme aamasna gelindi :

    #include void towers(int, char, char, char);

    void main(){

    int n;scanf(%d,&n);towers(n,A,B,C);

    }

    void towers(int n, char frompeg, char topeg, char auxpeg){

    if(n==1) {printf("\n%d%s%c%s%c%s",n,". diski ",frompeg," kulesinden alp ",topeg, " kulesine yerletir");

    return;};towers(n-1, frompeg,auxpeg,topeg); // n-1 diskin yardmc kuleye konulmasprintf("\n%d%s%c%s%c%s",n,". diski ",frompeg," kulesinden alp ",

    topeg, " kulesine yerletir");towers(n-1, auxpeg,topeg,frompeg); // n-1 diskin hedef kuleye konulmas

    }

    Programn n=3 disk iin altrlmas sonucu oluan ekran kts :

    1. diski A kulesinden alp C kulesine yerletir2. diski A kulesinden alp B kulesine yerletir1. diski C kulesinden alp B kulesine yerletir3. diski A kulesinden alp C kulesine yerletir1. diski B kulesinden alp A kulesine yerletir2. diski B kulesinden alp C kulesine yerletir1. diski A kulesinden alp C kulesine yerletir

  • 8/8/2019 Data Structures 3e

    32/93

    VER YAPILARI Blm 3 : zyineleme

    Y. Do. Dr. Aybars UUR 30

    3.2.5 Tek Bal Listede Elemanlarn Ters Srada Listelenmesindezyineleme

    Procedure RevPrint (list:ListType)begin

    if listNILthenbegin

    RevPrint(List^.Next);write(list^.info)

    end;end;

    Ekran kts : E D C B A

    Elemanlar bir yta koyup ters srada listelemek yerine dorudan zyinelemekullanmak daha basit ve doal.

    3.3zyineleme Zinciri

    zyineli bir fonksiyonun kendisini dorudan armas gerekmez. Dolayl

    olarak da arabilir. rnek bir yap u ekildedir :

    a(parametreler){......b(deerler);

    ......}

    b(parametreler){......

    a(deerler);......}

    List A B C D E

  • 8/8/2019 Data Structures 3e

    33/93

    VER YAPILARI Blm 3 : zyineleme

    Y. Do. Dr. Aybars UUR 31

    3.4zyineleme (Recursion) ve terasyon (Iteration)

    Herhangi bir fonksiyonun iteratif (iterative) yani tekrarl versiyonu, zyineli(recursive) versiyonundan zaman (time) ve yer (space) bakmndan genelde dahaetkindir. Bunun nedeni, zyinelemede fonksiyonun her arlnda fonksiyona

    giri ve kta oluan yklerdir.

    Bununla birlikte genelde yaps uygun olan problemlerin zmndezyinelemenin kullanlmas daha doal ve mantkldr. Tanmlamalardanzme dorudan ulalabilir. Yt kullanm gerektiren durumlarda zyineliolmayan zmlerin gelitirilmesi zordur ve hatalar gidermek iin daha fazlaaba harcamak gerekir. rnek olarak, tek bal listedeki elemanlarn ters sradayazdrlmas verilebilir. zyineli zmde yt otomatik olarak olumaktadr veayrca yt kullanmaya gerek kalmaz.

    terasyonda Control Structure olarak dngler yolu ile tekrar kullanlrken,zyinelemede seim yaps kullanlr. terasyonda tekrar, dorudan salanrken,zyinelemede srekli fonksiyon arlar ile salanr. terasyon, dng durumart geersizliinde sonlanrken, zyineleme en basit duruma (simplest case =base case) ulaldnda sonlanr. terasyonda kullanlan saya deerideitirilerek problem zlrken, zyinelemede orijinal problemin daha basitsrmleri oluturularak zme ulalr.

  • 8/8/2019 Data Structures 3e

    34/93

    VER YAPILARI B

    Y. Do. Dr. Aybars UUR

    JAVA'DA ZYNELEME RNE : Faktryel

    // Verilen bir saynn faktryelini bulan metodu ieren rnekimport java.io.*;

    class FaktoryelOrnek{static int sayi;

    public static void main(String args[]) throws IOException{

    System.out.print("Sayi veriniz :");System.out.flush();sayi=getInt();

    int sonuc = factorial(sayi);System.out.println(sayi+"! ="+sonuc);

    }

    public static int factorial(int n){

    if(n==0)return 1;

    elsereturn(n*factorial(n-1));

    }

  • 8/8/2019 Data Structures 3e

    35/93

    VER YAPILARI B

    Y. Do. Dr. Aybars UUR

    public static String getString() throws IOException{

    InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);String s = br.readLine();return s;

    }

    public static int getInt() throws IOException{

    String s = getString();return Integer.parseInt(s);

    }

    }

  • 8/8/2019 Data Structures 3e

    36/93

    VER YAPILARI Blm 4 : AALAR

    Y. Do. Dr. Aybars UUR 34

    BLM 4AALAR (TREES)

    4.1 Giri

    Bal listeler, ytlar ve kuyruklar dorusal (linear) veri yaplardr. Aalar isedorusal olmayan belirli niteliklere sahip iki boyutlu veri yaplardr (ekil 4.1).Aalardaki dmlerden iki veya daha fazla ba kabilir. kili aalar (binarytrees), dmlerinde en fazla iki ba ieren (0,1 veya 2) aalardr. Aacn enstteki dmne kk (root) ad verilir.

    ekil 4.1 : Bir ikili aacn grafiksel gsterimleri

    ekil 4.1'de grlen aacn dmlerindeki bilgiler saylardan olumutur. Herdmdeki sol ve sa balar yardm ile dier dmlere ulalr. Sol (leftptr) vesa (rightptr) balar bo ("NULL" = "/" = "\") da olabilir. Dm yaplardeiik trlerde bilgiler ieren veya birden fazla bilgi ieren aalar da olabilir.Doadaki aalar kklerinden geliip ge doru ykselirken veri yaplarndakiaalar kk yukarda yapraklar aada olacak ekilde izilirler.

    ekil 4.2'deki aa, A dm kk olmak zere 9 dmden olumaktadr. Solalt aa B kk ile balamakta ve sa alt aa da C kk ile balamaktadr.A'dan solda B'ye giden ve sada C'ye giden iki dal (branch) kmaktadr.

    5

    7 8

    9

    5

    7 8

    9

  • 8/8/2019 Data Structures 3e

    37/93

    VER YAPILARI Blm 4 : AALAR

    Y. Do. Dr. Aybars UUR 35

    ekil 4.2 : Aalarda dzeyler

    4.2 Tanmlar (rnekler ekil 4.2'ye gre verilmitir) :

    1) kili Aa (Binary Tree) : Sonlu dmler kmesidir. Bu kme bo birkme olabilir (empty tree). Bo deilse u kurallara uyar.

    i) Kk olarak adlandrlan zel bir dm vardr.ii) Her dm en fazla iki dme baldr.iii) Kk hari her dm bir daldan gelmektedir.iv) Tm dmlerden yukar doru kldka sonuta kke ulalr.

    2) Dm (node) : Aacn her bir elemanna dm ad verilir.

    rnekler : A, B, C.3) Kk (root) : Dzey 0'daki (emann en stndeki) tek dm.

    rnek : ekil 4.2'de A bilgisini ieren dm.

    4) ocuk (child) : Bir dmn sol ve sa ba aracl ile balanddmler o dmn ocuklardr. rnek : B ve C, A'nn ocuklardr.

    5) Parent : Bir dm, sa ve sol balar ile baland dmlerin parent'dr.A dm, B ve C dmlerinin parent'dr.

    6) Bir dmn dzey (level) veya derinlii (depth) : Bir dmn kkdmden olan uzakldr. rnek : D dmnn dzeyi veya derinlii2'dir.

    7) Aacn derinlii (depth of tree) : En derindeki yapran derinlii veyaykseklii (height). rnek : ekil 4.2'deki aacn derinlii 3'tr.

    A

    B C

    D

    G

    E F

    H I

    Dzey 0Dzey 0

    Dzey 1

    Dzey 2

    Dzey 3

  • 8/8/2019 Data Structures 3e

    38/93

    VER YAPILARI Blm 4 : AALAR

    Y. Do. Dr. Aybars UUR 36

    8) Yaprak (leaf) : Sol ve sa ba bo olan dmlere yaprak ad verilir.rnekler : D,G,H,I.

    9) Karde (sibling, brother) : Ayn parent'a sahip iki dme karde dmlerad verilir. rnekler : B ile C kardetir. D ile E kardetir. H ile I kardetir.

    10) Ancestor (st dm) : Bir dmn parent' birinci ancestor'dr.Parent'n parent' (recursion) ikinci ancestor'dr. Kk, kendi hari tmdmlerin ancestor'dr.

    11) Descendant (alt dm) : Bir dmn iki ocuu birincidescendant'lardr. Onlarn ocuklar da ikinci descendant'lardr.

    12) Full binary tree : i) Her yapra ayn derinlikte olan ii) Yaprak olmayandmlerin tmnn iki ocuu olan aa Full (Strictly) Binary Tree'dir

    (kinci art yeterli). Bir full binary tree'de n tane yaprak varsa bu aatatoplam 2n-1 dm vardr.

    13) Complete binary tree : Full binary tree'de yeni bir derinlie soldan saadoru dmler eklendiinde oluan aalara Complete Binary Tree denilir.Byle bir aata baz yapraklar dierlerinden daha derindir. Bu nedenle fullbinary tree olmayabilirler. En derin dzeyde dmler olabildiince soldadr.

    14) General Tree (Aa) : Her dmn en fazla iki ocuu olabilme snrolmayan aalardr.

    15) kili Arama Aac (Binary Search Tree) : Bo olan veya her dmaadaki artlara uyan anahtara sahip bir ikili aatr :

    i) Kkn solundaki alt aalardaki (eer varsa) tm anahtarlar kktekianahtardan kktr.

    ii) Kkn sandaki alt aalardaki (eer varsa) tm anahtarlar kktekianahtardan byktr.

    iii) Sol ve sa alt aalar da ikili arama aalardr.

  • 8/8/2019 Data Structures 3e

    39/93

    VER YAPILARI Blm 4 : AALAR

    Y. Do. Dr. Aybars UUR 37

    4.3 kili Aalar ve kili Aalar zerindeki Dolama lemleri

    Dolama (traverse), aa zerindeki tm dmlere urayarak gerekletirilir.Aalar zerindeki dolama ilemleri, aataki tm bilgilerin listelenmesi veyabaka amalarla yaplr. Dorusal veri yaplarnda batan sona doru dolamak

    kolaydr. Aalar ise dmleri dorusal olmayan veri yaplardr. Bu nedenlefarkl algoritmalar uygulanr. ok bilinen yntemler tane olup zyinelemedenyararlanrlar :

    1) Preorder (depth-first order) Dolama (Traversal)i) Kke ura (visit)ii) Sol alt aac preorder olarak dola.iii) Sa alt aac preorder olarak dola.

    2) Inorder (Symmetric order) Dolama

    i) Sol alt aac inorder'a gre dolaii) Kke ura (visit)iii) Sa alt aac inorder'a gre dola.

    3) Postorder Dolamai) Sol alt aac postorder'a gre dolaii) Sa alt aac postorder'a gre dola.iii) Kke ura (visit)

    ekil 4.3 :kili Aa ve deiik ekillerde dolalmas

    A

    B C

    D

    G

    F

    H I

    E

    PreOrder : ABDGCEHIF

    InOrder : DGBAHEICF

    PostOrder : GDBHIEFCA

  • 8/8/2019 Data Structures 3e

    40/93

    VER YAPILARI Blm 4 : AALAR

    Y. Do. Dr. Aybars UUR 38

    4.4 kili Arama Aalar

    kili arama aalar, her bir dmn solundaki (sol alt aacndaki) tmdmler kendisinden kk, sandakiler (sa alt aacndakiler) dekendisinden byk olacak ekilde oluturulurlar (ekil 4.4). kili arama

    aalarndaki en nemli ilemlerden birisi aramadr.

    rnek olarak aadaki aata, 44 saysn aratmak iin u ilem sras izlenir :Karlatrma 1 : 44, 47 ile karlatrlr.

    4425 olduundan sa badan ilerlenir.Karlatrma 3 : 44, 43 ile karlatrlr.

    44>43 olduundan sa badan ilerlenir.Karlatrma 4 : 44 == 44.

    Aranan anahtar deeri aata bulundu!

    rnek olarak aadaki aata, 90 saysn aratmak iin u ilem sras izlenir :Karlatrma 1 : 90, 47 ile karlatrlr.

    90>47 olduundan sa badan ilerlenir.Karlatrma 2 : 90, 77 ile karlatrlr.

    90>77 olduundan sa badan ilerlenir.Karlatrma 3 : 90, 93 ile karlatrlr.

    90

  • 8/8/2019 Data Structures 3e

    41/93

    VER YAPILARI Blm 4 : AALAR

    Y. Do. Dr. Aybars UUR 39

    Grld gibi arama ileminin etkinlii aacn yksekliine baldr. kiliarama aalar dengeli tutulabilirse, bir anahtar deerini aramada oldukahzldrlar. Byle olduunda n elemanl bir aa en fazla log2n dzeyden oluur.Bir deerin bulunmas veya aata olmadnn belirlenmesi iin en fazla log2nkarlatrma yaplr. rnek olarak 1000 elemanl bir ikili arama aacnda bir

    elemann bulunabilmesi iin en fazla 10 karlatrma yapmak gerekecektir(210=1024 > 1000). Bal listelerde ise bulunacak elemann deerine gre(eleman sonda ise) 1000 karlatrma yapmak gerekebilir.

    Dm says n olan Complete Binary Tree'de derinlii hesaplayabiliriz.n = 20 + 21 + 22 +... + 2d = 2d+1-1 => n+1 = 2d+1 => d = log2(n+1) - 1'dir.15 dml bir aata d = log2(15+1) - 1 = 4-1 = 3'tr.

    kili aalardaki dolama ilemlerinin tm ikili arama aalarnda da kullanlr.kili arama aalar zerinde inorder dolaldnda tm elemanlar kkten

    bye sral bir ekilde karmza gelecektir.

    kili arama aalarnn oluturulmas ise u ekildedir : Herhangi sral olmayanbir say dizisi gelirken her bir eleman aaca bir yaprak dm olarak eklenir.rnek olarak sra ile, 47, 25, 43, 77, 65, 68, 93, 11, 17, 44, 31, 7 saylar aacaeklenmek istenirse:47 : 47 kke eklenir.25 : 2547, 47'nin sana eklenir.

    65 : 65>47, 65

  • 8/8/2019 Data Structures 3e

    42/93

    VER YAPILARI Blm 4 : AALAR

    Y. Do. Dr. Aybars UUR 40

    4.5 kili Arama Aac Oluturmay ve Dolamay Salayan Java Program

    // Dm Snfclass TreeNode{

    public int data;public TreeNode leftChild;public TreeNode rightChild;

    public void displayNode(){ System.out.print(" "+data+" "); }

    }

    // Aa Snfclass Tree{

    private TreeNode root;

    public Tree(){ root = null; }

    public TreeNode getRoot(){ return root; }

    // Aacn preOrder Dolalmaspublic void preOrder(TreeNode localRoot)

    { if(localRoot!=null){localRoot.displayNode();preOrder(localRoot.leftChild);preOrder(localRoot.rightChild);}

    }

    // Aacn inOrder Dolalmaspublic void inOrder(TreeNode localRoot){if(localRoot!=null){inOrder(localRoot.leftChild);localRoot.displayNode();inOrder(localRoot.rightChild);

    }}

  • 8/8/2019 Data Structures 3e

    43/93

    VER YAPILARI Blm 4 : AALAR

    Y. Do. Dr. Aybars UUR 41

    // Aacn postOrder Dolalmaspublic void postOrder(TreeNode localRoot){if(localRoot!=null){postOrder(localRoot.leftChild);

    postOrder(localRoot.rightChild);localRoot.displayNode();

    }}

    // Aaca bir dm eklemeyi salayan metotpublic void insert(int newdata){TreeNode newNode = new TreeNode();newNode.data = newdata;if(root==null)

    root = newNode;else{TreeNode current = root;TreeNode parent;while(true){parent = current;if(newdata

  • 8/8/2019 Data Structures 3e

    44/93

    VER YAPILARI Blm 4 : AALAR

    Y. Do. Dr. Aybars UUR 42

    // BinTree Test snfclass BinTree{public static void main(String args[]){

    Tree theTree = new Tree();

    // Aaca 10 tane say yerletirilmesiSystem.out.println("Saylar : ");for (int i=0;i

  • 8/8/2019 Data Structures 3e

    45/93

    VER YAPILARI Blm 5 : YIIT

    Y. Do. Dr. Aybars UUR 43

    BLM 5YIIT (STACK)

    5.1 Giri

    Eleman ekleme karmalarn en stten (top) yapld veri yapsna yt (stack)ad verilir. Bir eleman ekleneceinde ytn en stne konulur. Bir elemankarlaca zaman ytn en stndeki eleman karlr. Bu eleman da yttakielemanlar iindeki en son eklenen elemandr. Bu nedenle ytlara LIFO (Last InFirst Out : Son giren ilk kar) listesi de denilir.

    5.2 Yt lemleri ve Tanmlar

    (Tanm) Bo yt (empty stack) : Eleman olmayan yt.push (yta eleman ekleme) : push(s,i), s ytnn en stne i deerinieleman olarak ekler.pop (yttan eleman karma) : i = pop(s), s ytnn en stndeki elemankartr ve deerini i deikenine atar.empty (ytn bo olup olmadn belirleyen ilem) : empty(s), yt bo iseTRUE deerini, deilse FALSE deerini dndrr.stacktop (yttan karlmakszn en stteki elemann deerini dndren ilem)Denk ilem : (peek)

    i = pop(s);push(s,i);(Tanm) Underflow : Bo yt zerinden eleman karlmaya veya ytn enstndeki elemann deeri belirlenmeye alldnda oluan geersiz durum.(zm : pop(s) veya stacktop(s) yaplmadan, empty(s) kontrol yaplarak, bobir yt olup olmad belirlenir. Bo ise bu ilemlerin yaplmas engellenir.)

    5.3 Yt Kullanm (rnek)

    Bir yt ve zerindeki ilemlerin tanmlandn dnelim. ie parantezlerieren bir ifadede parantezlerin geerli olmas iin :1. Alan ve kapanan toplam parantez says eit olmaldr. A ( ve kapa )parantezlerin eitliine baklr.2. Kapanan her parantezden nce bir parantez alm olmaldr. Her ) iin bir( olup olmadna baklr.((A+B) ve A+B( 1. arta uymaz.)A+B(-C ve (A+B))-(C+D 2. arta uymaz.

  • 8/8/2019 Data Structures 3e

    46/93

    VER YAPILARI Blm 5 : YIIT

    Y. Do. Dr. Aybars UUR 44

    Problemin zm iin her alan parantezde bir geerlilik alan alr vekapanan parantezde de kapanr. fadenin herhangi bir noktasndaki NestingDepth (parantez derinlii) o ana kadar alm fakat kapanmam parantezlerinsaysdr. fadenin herhangi bir noktasndaki parantez says = ( says )

    says olarak belirtilebilir. Parantezleri geerli bir ifadede u artlar olmaldr.

    1. fadenin sonunda parantez says 0 olmaldr. fadede ya hi parantez yokturveya alan parantezlerin says ile kapanan parantezlerin says eittir.2. fadenin hibir noktasnda parantez says negatif olmamaldr. Bu, parantezalmadan bir parantezin kapanmadn garantiler.

    Aadaki ifade iki arta da uyar :7-((x*((x+y)/(j-3))+y)/(4-2.5))00122234444334444322211222 2 10

    Aadaki ifade 1. arta uymaz :((A+B)122221 (fade sonunda 1 parantez artt. 0 deil)

    Aadaki ifade 2. arta uymaz :( A + B ) ) - ( C + D1 1 1 1 0-1-1 0 0 0 0 (Arada negatif oldu)

    Problem biraz deitirildiinde :parantezler (parentheses) : (, )keli parantezler (brackets) : [, ]kme parantezleri (braces) : {, }

    ierebilen ifadelerin parantez doruluu kontrolnn yaplmas istendiindeparantez saylarnn yannda tiplerinin de tutulmas gerekecektir. Bu nedenleyukardaki yntemin kullanlmas uygun olmaz.

    void main() { printf(Merhaba}; );yanl bir ifadedir.

    Karlalan parantezleri tutmak zere yt kullanlabilir (ekil 5.1). Birparantezle karlaldnda yta eklenir. lgili parantezlerin karl ilekarlaldnda ise yta baklr. Yt bo deilse yttan bir elemankarlarak doru karlk olup olmad kontrol edilir. Doruysa ilemsrdrlr. Deilse ifade geersizdir. Yt sonuna ulaldnda yt boolmaldr. Aksi halde alm ama kapanmam parantez olabilir.

  • 8/8/2019 Data Structures 3e

    47/93

    VER YAPILARI Blm 5 : YIIT

    Y. Do. Dr. Aybars UUR 45

    {x+(y-[a+b])*c-[(d+e)]}/(h-(j-(k-[l-n]))).e e e ee e e e e

    ekil 5.1 : fadelerin parantez geerliliinin belirlenmesinde kullanlan yt

    5.4 Yt Soyut Veri Tipi (Stack ADT) (Bu gsterim ekli snava dahil deil=optional)

    Yt ADTnin gsterimi (eltype ytn elemanlarnn veri tipi olmak zere) :

    abstract typedef STACK (eltype);

    abstract empty(s)STACK(eltype) s;postcondition empty==(len(s)==0);

    abstract eltype pop(s)STACK(eltype) s;precondition empty(s)==FALSE;postcondition pop=first(s);

    s == sub(s, 1, len(s)-1);abstract push(s,elt)STACK(eltype) s;eltype elt;postcondition s == +s;

    5.5 Java'da Ytlar

    Ytn dizi kullanlarak gerekletirimi (ekil 5.2):

    ekil 5.2 : s yt zerinde eleman ekleme ve karma ilemleri.

    ....

    695

    top=2

    ekle(s,7)s

    ....7695

    top=3

    kar(s)

    ....

    695

    top=2

    {({

    [({

    ({ {

    [{

    (

    [{

    [{

    ....................

    [(((

  • 8/8/2019 Data Structures 3e

    48/93

    VER YAPILARI Blm 5 : YIIT

    Y. Do. Dr. Aybars UUR 46

    top = 2nin anlam ytta 3 eleman vardr ve ytn en stndeki eleman [2]dir.Bo ytta top = -1dir.

    Javada karakter yt snf oluturma ve kullanmna ilikin bir rnek uekildedir :

    import java.io.*;

    class StackChar{private int maxSize;private char[] stackArray;private int top;

    public StackChar(int max){maxSize = max;stackArray = new char[maxSize];top = -1;

    }

    public void push(char j){ stackArray[++top] = j; }

    public char pop(){ return stackArray[top--]; }

    public boolean isEmpty(){ return top==-1; }

    }

    class Reverse{public static void main(String args[]){

    StackChar y = new StackChar(100);String str = "Merhaba";for(int i=0; i

  • 8/8/2019 Data Structures 3e

    49/93

    VER YAPILARI Blm 5 : YIIT

    Y. Do. Dr. Aybars UUR 47

    Java'da hazr Stack (yt) snf da bulunmaktadr. Aadaki rnekte String'ler,oluturulan s ytna yerletirilerek ters srada listelenmektedir.

    import java.util.*;

    public class StackTest{public static void main(String args[]){

    String str[] = { "Bilgisayar", "Dolap", "Masa","Sandalye", "Sra" };

    Stack s = new Stack();

    for(int i=0; i

  • 8/8/2019 Data Structures 3e

    50/93

    VER YAPILARI Blm 5 : YIIT

    Y. Do. Dr. Aybars UUR 48

    5.6 INFIX, POSTFIX, PREFIX

    Bu ksmda bilgisayar alanndaki nemli konulardan biri olan infix, postfix veprefix kavramlar zerinde durulacak ve bu kavramlarda yt kullanmgsterilecektir.

    A+Boperator (ilemci) : +operands (ilenenler) : A, B

    infix gsterim : A+Bprefix gsterim : +AB (benzeri bir gsterim add(A,B) fonksiyonu)postfix gsterim : AB+

    in, pre ve post, operatorn operandlara gre yerine karlk gelir. Infix

    gsterimde ilemci (+), ilenenlerin (A,B) arasnda yer alr. Prefix gsterimdeiareti, ilenenlerden nce gelir, postfix gsterimde de sonra gelir.

    A+B*C infix ifadesini postfixe evirelim.Bunun iin ilem nceliine bakmak gerekir. arpmann toplamaya nceliiolduu iin, A+(B*C) eklinde dnlebilir. nce arpma ksm postfixeevrilecek sonra da sonucu.

    A+(B*C) anlalrl artrmak iin parantez kullandk.A+(BC*) arpm evrildi.

    A(BC*)+ toplam evrildi.ABC*+ postfix form.

    lem ncelii (bykten ke)s almaarpma/BlmeToplama/karma

    Parantezsiz ve ayn ncelie sahip ilemcilerde ilemler soldan saa doruyaplr (s alma hari). s almada sadan sola dorudur. A-B+C de ncelik (A-B)+C eklindedir. A^B^Cde ise A^(B^C) eklindedir. Parantezler defaultncelikleri belirtmek iin konulmutur.

    Infix Postfix PrefixA+B-C AB+C- -+ABC

    (A+B)*(C-D) AB+CD-* *+AB-CDA^B*C-D+E/F/(G+H) AB^C*D-EF/GH+/+ +-*BCD//EF+GH

    ((A+B)*C-(D-E))^(F+G) AB+C*DEFG+^ ^-*+ABC-DE+FGA-B/(C*D^E) ABCDE^*/- -A/B*C^DE

  • 8/8/2019 Data Structures 3e

    51/93

    VER YAPILARI Blm 5 : YIIT

    Y. Do. Dr. Aybars UUR 49

    Dikkat edilecek olunursa, postfix ile prefix ifadeler birbirinin ayna grntsdeildir.

    Postfix formda parantez kullanmna gerek yoktur. ki infix ifadeyi dnn :

    A+(B*C) ve (A+B)*C. lk ifadede parantez gereksizdir. kincide ilk ifade ilekartrlmamas iin gereklidir. Postfix forma evirmek bu karkl nler.(A+B)*(C+D)yi infix formda parantezsiz ifade etmek iin arpm ilemiyaplrsa ilem says oalr.

    Infix formdan postfix forma evrilen bir ifadede operandlarn (say veyasembol) bal olduu operatorleri (+,-,*,/) grmek zorlar (3 4 5 * + ifadesininsonucunun 23e, 3 4 + 5 * ifadesinin sonucunun 35e karlk geldiini bulmakzor gibi grnr). Fakat parantez kullanmadan tek anlama gelen bir halednr. lemleri, hesaplamalar yapmak kolaylar.

    postfix ifadenin sonucunun hesaplanmas (ve bunu gerekletiren algoritma) :

    Bir postfix stringinde her operator kendinden nce gelen iki operand zerinde ilemyapacaktr. Bu operandlar daha nceki operatorlerin sonular da olabilir. Bir anda ifadedenbir operand okunarak yta yerletirilir. Bir operatore ulaldnda, ytn en stndeki ikieleman bu operatorn operandlar olacaktr. ki eleman yttan karlr ilem yaplr vesonu tekrar yta konulur. Artk bir sonraki operatorn operand olmaya hazrdr.

    Birok derleyici 3*2+5*6 gibi bir infix ifadenin deerini hesaplayaca zamanpostfix forma dntrdkten (belirsizlii ortadan kaldrdktan sonra) sonucu

    hesaplar : 3 2 * 5 6 * + (ekil 5.3).

    ekil 5.3 : Bir postfix ifadenin 3 2 * 5 6 * + sonucunun hesaplanmas

    23

    top6

    3 2 *

    top

    656

    5 6

    top

    Son iki eleman yttan karlr, ilem yaplr, sonu yta yerletirilir.

    306

    *

    top

    +

    top36

  • 8/8/2019 Data Structures 3e

    52/93

    VER YAPILARI Blm 5 : YIIT

    Y. Do. Dr. Aybars UUR 50

    Algoritma : (Bir postfix ifadenin sonucunu hesaplar)

    opndstk = the empty stack;// scan the input string reading one element at a time into symbwhile (not end of input) {

    symb = next input character;

    if (symb is an operand)push(opndstk,symb);else {

    // symb is an operatoropnd2 = pop(opndstk);opnd1 = pop(opndstk);value = result of applying symb (case *,/,+,-) to opnd1 and opnd2push(opndstk,value);

    } // end else} // end whilereturn(pop(opndstk));

    (optional : read program to evaluate a postfix expression, converting an expression frominfix to postfix from textbook).

    5.7 Fonksiyon ve metot armlar

    Ytlar, listelerin ters srada yazdrlmas, palindrom (okunduunda ve terstenokunduunda ayn sonucu veren karakter dizisi) benzeri yaplarn bulunmas, birifadedeki parantez gibi sembollerin geerliliinin test edilmesi, ifadelerinsonularnn hesaplanp deerlerinin elde edilmesi, infix ifadelerin postfixifadeye dntrlmesi gibi amalarla kullanlabildii gibi, programlama diliderleyicileri (compiler) fonksiyon armlarnda da ytlardan yararlanrlar.

    Bir fonksiyon arldnda, aran fonksiyonun yerel deikenleri sistemtarafndan kaydedilmelidir; aksi halde arlan fonksiyon aran fonksiyonundeikenlerini ve deerlerini ortadan kaldracaktr. Ayrca aran fonksiyondakalnan nokta (geri dn adresi), arlan fonksiyonun bitmesinden sonra geridnmek zere tutulmaldr.

    Soyut olarak bakldnda, yeni bir fonksiyonun arlmas ile aranfonksiyonun deikenleri ve geri dnlecek adres bir kada kaydedilir ve dahance arlan fonksiyonlara ilikin bilgilerin tutulduu katlarn zerinekonulur. Bundan sonra denetim arlan fonksiyona geer. Kendi deikenlerineyer aarak onlar zerinde ilemler yaplmasn salar. Fonksiyondan geridnlecei zaman en stteki kada baklp deikenler zerinde ilgilideiiklikler yaplarak geri dn adresine atlanr. Derleyici bu ilemleri katyerine yt kullanarak gerekletirir.

  • 8/8/2019 Data Structures 3e

    53/93

    VER YAPILARI Blm 6 : KUYRUKLAR

    Y. Do. Dr. Aybars UUR 51

    BLM 6KUYRUKLAR (QUEUES)

    6.1 Giri

    Bu blmde gerek yaamdaki kuyruklarn bilgisayardaki gsterimleri zerindedurulacaktr. Kuyruklar, eleman eklemelerin sondan (rear) ve elemankarmalarn batan (front) yapld veri yaplardr. Bir eleman ekleneceizaman kuyruun sonuna eklenir. Bir eleman karlaca zaman kuyruktabulunan ilk eleman karlr. Bu eleman da kuyruktaki elemanlar iinde ilkeklenen elemandr. Bu nedenle kuyruklara FIFO (First-In First-Out = ilk girenilk kar) listeleri de denilmektedir. Gerek yaamda da bankalarda, duraklarda,gielerde, spermarketlerde, otoyollarda kuyruklar olumaktadr. Kuyrua ilkolarak girenler ilemlerini ilk olarak tamamlayp kuyruktan karlar. Veriyaplarndaki kuyruklar bu tr veri yaplarnn simlasyonunda kullanlmaktadr.

    Ayrca ilemci, yazc, disk gibi kaynaklar zerindeki ilemlerin yrtlmesindeve bilgisayar alarnda paketlerin ynlendirilmesinde de kuyruklardanyararlanlmaktadr.

    6.2 Kuyruk lemleri ve Tanmlar

    insert(q,x) : q kuyruunun sonuna x elemann ekler. (enqueue)x=remove(q) : q kuyruunun bandaki eleman silerek x'e atar. (dequeue)

    ( Seimlik : Stacks and Queues konusunu okuyun )

    6.3 ncelik Kuyruu (Priority Queue)

    Ytlarda ve kuyruklarda elemanlar eklenme srasnda dayal olarak sralanrlar.Ytlarda ilk olarak son eklenen, kuyruklarda ise ilk eklenen eleman karlr.Elemanlar arasndaki gerek sralama (saysal sra veya alfabetik sra gibi)dikkate alnmaz.

    ncelik kuyruklar, temel kuyruk ilemlerinin sonularn elemanlarn gereksrasnn belirledii veri yaplardr. Azalan ve artan srada olmak zere iki trncelik kuyruu vardr. Artan ncelik kuyruklarnda elemanlar herhangi bir yereeklenebilir ama sadece en kk eleman karlabilir. apq, artan ncelik kuyruuolmak zere pqinsert(apq,x) x elemann kuyrua ekler ve pqmindelete(apq) enkk eleman kuyruktan kararak deerini dndrr. Azalan ncelik kuyruuise artan ncelik kuyruunun tam tersidir.

  • 8/8/2019 Data Structures 3e

    54/93

    VER YAPILARI Blm 6 : KUYRUKLAR

    Y. Do. Dr. Aybars UUR 52

    Artan ncelik kuyruunda nce en kk eleman, sonra ikinci kk elemansrayla karlacandan dolay elemanlar kuyruktan artan srayla kmaktadrlar.Birka eleman karldktan sonra ise daha kk bir eleman eklenirse doalolarak kuyruktan karldnda nceki elemanlardan daha kk bir elemankm olacaktr.

    ncelik kuyruklarnda sadece saylar veya karakterler deil karmak yaplar daolabilir. rnek olarak telefon rehberi listesi, soyad, ad, adres ve telefon numarasgibi elemanlardan olumaktadr ve soyada gre sraldr.

    ncelik kuyruklarndaki elemanlarn srasnn elemanlarn alanlarndan birisinegre olmas gerekmez. Elemann kuyrua eklenme zaman gibi elemanlarnalanlar ile ilgili olmayan dsal bir deere gre de sral olabilirler.

    ncelik kuyruklarnn gerekletiriminde dizi kullanm etkin bir yntem

    deildir.

    6.4 Kuyruk Tasarm ve Kullanm

    // Kuyruk snfclass Kuyruk{private int boyut;private int[] kuyrukDizi;private int bas;

    private int son;private int elemanSayisi;

    // Yapc Metot (Constructor)public Kuyruk(int s){boyut = s;kuyrukDizi = new int[boyut];bas = 0;son = -1;elemanSayisi = 0;

    }

    public void ekle(int j) // Kuyrugun sonuna eleman ekler{if (son==boyut-1) son = -1;kuyrukDizi[++son] = j;elemanSayisi++;

    }

  • 8/8/2019 Data Structures 3e

    55/93

    VER YAPILARI Blm 6 : KUYRUKLAR

    Y. Do. Dr. Aybars UUR 53

    public int cikar(){int temp = kuyrukDizi[bas++];if(bas==boyut) bas=0;elemanSayisi--;

    return temp;}

    public boolean bosMu(){return(elemanSayisi==0);

    }

    }

    // 1'den 10'a kadar olan sayilari kuyruga yerlestirip// srayla karan programpublic class KuyrukTest{public static void main(String args[]){Kuyruk k = new Kuyruk(25);

    k.ekle(1);k.ekle(2);System.out.println(k.cikar()); // 1

    k.ekle(3);for(int i=4; i

  • 8/8/2019 Data Structures 3e

    56/93

    VER YAPILARI Blm 7 : Listeler ve Bal Listeler

    Y. Do. Dr. Aybars UUR 54

    BLM 7LSTELER ve BALI LSTELER (LINKED LISTS)

    7.1 Listeler

    Gnlk yaamda listeler pek ok yerde kullanlmaktadr. Alveri listeleri,adres listeleri, davetli listeleri gibi. Bilgisayar programlarnda da listeler yararlve yaygn olarak kullanlan veri yaplarndandrlar. Programlama asndan liste,aralarnda dorusal iliki olan veriler topluluu olarak grlebilir. Yt vekuyruklarn geniletilmesi yani zerlerindeki snrlamalarn kaldrlmas ile listeyapsna ulalr. Veri yaplarnda deiik biimlerde listeler kullanlmakta vezerlerinde deiik ilemler yaplmaktadr.

    7.2 Listeler zerindeki Baz lemler ve Tanmlar

    1. EmptyList(List) : returns BooleanListenin bo olup olmadn belirleyen fonksiyon.

    2. FullList(List) : returns BooleanListenin dolu olup olmadn belirleyen fonksiyon.

    3. LengthList(List) : returns integerListedeki eleman saysn bulan fonksiyon.

    4. InsertElement(List, NewElement)Listeye yeni bir eleman ekleyen fonksiyon.

    5. DeleteElement(List, Element)Listeden bir eleman arayarak kartan fonksiyon.6. DestroyList(List)

    Listedeki tm elemanlar silerek bo liste brakan fonksiyon.7. GetNextItem(List, Element)

    Etkin elemandan bir sonrakini dndren fonksiyon8. RetrieveElement(List, Element, Found)

    Elemann listede olup olmadn bulan ve dndren fonksiyon.

    7.3 Bal (Balal) ListelerKendi tipindeki bir yapy gsteren bir iareti yesine sahip yaplara self-referential structures ad verilir. rnek olarak :

    struct node {char info;struct node *next; };

  • 8/8/2019 Data Structures 3e

    57/93

    VER YAPILARI Blm 7 : Listeler ve Bal Listeler

    Y. Do. Dr. Aybars UUR 55

    yaps, info adl karakter tipli bilgi elemannn yannda, bir dm yapsnda birbellek blgesine iaret eden next iaretisine sahiptir. Bu tr yaplarn arkaarkaya birbirine balanmas mant listelerde, ytlarda, kuyruklarda veaalarda olduka yararldr.

    Listedeki her dmde bir sonraki dmn adresinin tutulduu veri yaps(dorusal) bal liste olarak adlandrlr (ekil 7.1). Listenin her bir elemannadm (node) ad verilir. Dmler, bilgi ve ba (adres) sahalarndanolumaktadrlar. Ba sahalarnda iaretiler kullanlmaktadr. Listenin ilkelemanna dardan bir iareti (list) ile eriilmektedir. Dier dmlere debalar yardm ile ulalabilmektedir. Son dmn sonraki adres (next) sahasNULL deerini ierir. NULL ba, liste sonunu belirtir. Eleman olmayan listebo liste olarak adlandrlr. Herhangi bir boyuta dinamik olarak geniletilipdaraltlabilen yt ve kuyruklarn gerekletirimi bal listeler zerinde

    yaplmaktadr.

    ekil 7.1 : Dorusal Bal Liste

    Ytlarda ve kuyruklarn gerekletiriminde sral bellek kullanmnn (dizi) enbyk dezavantaj, hi kullanlmasa veya az kullanlsa bile sabit miktardakibellein bu yaplara ayrlm olarak tutulmasdr. Ayrca sabit bellek miktaraldnda da tama olumas ve eleman ekleme ileminin yaplamamasdr.Bal listeler zerinde gerekletirildiklerinde ise bu problemler ortadankalkmaktadr. Bellekten sadece gerektii kadar yer ayrlmakta ve bellek boyutubitene kadar bu yaplara ekleme ilemi yaplabilmektedir.

    Bal listeler, baka veri yaplarnn gerekletiriminde kullanlabildikleri gibikendileri de veri yapsdrlar. Bal listelerde elemanlarn eklenme vekarlmasnda bir snrlama yoktur. Baa ve sona olduu gibi araya da elemaneklenebilir; batan ve sondan olduu gibi ortadan da eleman karlabilir. Balliste dolalarak herhangi bir elemanna eriilebilir. Bir bal listenin n.elemanna erimek iin n tane ilem yapmak yani kendinden nceki (n-1)eleman zerinden gemek gerekmektedir. Elemanlarn bellekteki yerleridizilerdeki gibi sral olmadndan elemanlar ve sralar ile yerletikleri bellekblgeleri arasnda bir iliki yoktur.

    Bal listelerin diziler zerine avantaj, bir grup eleman arasna elemaneklemede ve bir grup eleman arasndan eleman karmada ortaya kar.

    List A B C D E

    info next

    node

  • 8/8/2019 Data Structures 3e

    58/93

    VER YAPILARI Blm 7 : Listeler ve Bal Listeler

    Y. Do. Dr. Aybars UUR 56

    Dizilerde bir eleman silerken arada boluk kalmasn engellemek iinilerisindeki (sandaki) tm elemanlar bir geriye (sola) kaydrmak gerekir.Eleman eklemede de yer amak iin konulaca yerdeki ve ilerisindekielemanlar bir ileriye (saa) kaydrmak gerekecektir. Ka tane elemann yerdeitirecei (birer kaydrlaca) dizi boyutuna bal olarak ve eklenecek

    elemann yerine bal olarak deiecektir. Bal listelerde ise eleman ekleme vekarma iin yaplan i liste boyutundan bamszdr.

    7.4 ncelik Kuyruklarnn Bal Liste Gerekletirimi

    Yntem 1 : (Sral liste tutularak) (Artan sral ncelik kuyruunda)Eleman ekleme, eklenecek elemann listeyi sral tutacak ekilde liste zerindedolalarak araya eklenmesi eklinde gerekletirilir. Eleman karma da,listenin ilk elemannn (en kk deer) karlmas ile gerekletirilir.

    Yntem 2 : (Sral olmayan liste) (Artan sral ncelik kuyruunda)Eleman ekleme kuyruun herhangi bir yerine yaplabilir. Eleman karma iseeleman bulunana kadar tm kuyruk boyunca dolalmas ve elemann listedenkarlmas ile gerekletirilir.

    ncelik kuyruklarnda listelerin sralanarak kullanm sralanmadan kullanmnagre daha etkindir.

    7.5 Yt ve Kuyruklarn Bal Liste Gerekletirimleri

    Ytlarn bal liste gerekletirimi ekil 7.2de grlmektedir :

    ekil 7.2 : Ytlarn bal liste gerekletirimi. Eleman ekleme ve karma.

    5

    3

    8

    7

    Stack

    5

    3

    8

    7

    Stack6 ekle

    6

    5

    3

    8

    7

    Stack

    Eleman kar

    6

  • 8/8/2019 Data Structures 3e

    59/93

    VER YAPILARI Blm 7 : Listeler ve Bal Listeler

    Y. Do. Dr. Aybars UUR 57

    Kuyruklarn bal liste gerekletirimi ekil 7.3de grlmektedir :

    ekil 7.3 : Kuyruklarn bal liste gerekletirimi. Eleman ekleme ve karma.

    7.6 Dier Baz Liste Yaplar

    Dairesel Bal Listeler (Circular Linked Lists) : Tm dmlerin bir sonraki

    dm gsterdii bal listelerdir. Son elemann ba NULL deildir; ilkeleman gsterir. Bylece dairesel bir yap oluur.

    ift Bal Listeler (Doubly Linked Lists) : Her dm iki ba ierdii ballistelerdir. lk ba kendinden nceki dm gsterirken ikincisi de kendindensonraki dm gsterir. ift bal listelerde, tek bal listelerdeki geriye doru

    listeleme ve dolamadaki zorluklar ortadan kalkar.

    List A B C D E

    List A B C D E

    4 1 7 9 3

    Front Rear

    6 ekle :

    4 1 7 9 3

    Front Rear

    6

    Eleman kar :

    1 7 9 3

    Front Rear

    64

  • 8/8/2019 Data Structures 3e

    60/93

    VER YAPILARI Blm 7 : Listeler ve Bal Listeler

    Y. Do. Dr. Aybars UUR 58

    Dairesel ift Bal Listeler (Circular Doubly Linked Lists) : Hem dairesellikhem de ift ballk zelliklerine sahip listelerdir. lk dmden nceki dmson, son dmden sonraki dm de ilk dmdr.

    7.7 Java Programlama Dilinde Bal Liste rnei ve Kullanm

    // Bal Listenin Dm Yaps//////

    class Dugum{public int veri; // deiik tiplerde oaltlabilirpublic Dugum sonraki; // sonraki dmn adresi

    public Dugum(int gelenVeri) // Yapc metot{ veri = gelenVeri; } // Dm yaratlrken deerini

    // aktarr

    public void yazdir() // Dmn verisini yazdrr{ System.out.print(" "+veri); }

    }

    // Bal Liste Yaps////

    class BListe{// Listenin ilk dmnn adresini tutarprivate Dugum bas;

    List A B C D E

    veri sonraki

    Dm

    veri sonraki veri sonraki veri sonraki

    bas

  • 8/8/2019 Data Structures 3e

    61/93

    VER YAPILARI Blm 7 : Listeler ve Bal Listeler

    Y. Do. Dr. Aybars UUR 59

    public BListe() // Bir BListe nesnesi yaratldnda{ bas = null; } // bo liste olarak alr.

    //Listede anahtar deerini bulurpublic Dugum bul(int anahtar){

    Dugum etkin = bas;while(etkin.veri != anahtar){if(etkin.sonraki==null)return null;

    elseetkin = etkin.sonraki;

    };return etkin;

    }

    public void basaEkle(int yeniEleman){ // Liste bana eleman eklerDugum yeniDugum = new Dugum(yeniEleman);yeniDugum.sonraki = bas;bas = yeniDugum;}

    public Dugum sil(int anahtar){ // Verilen anahtar deerindeki dm siler

    Dugum etkin = bas;Dugum onceki = bas;

    while(etkin.veri!=anahtar){if(etkin.sonraki==null)return null;

    else{ onceki = etkin; etkin = etkin.sonraki; }

    }

    if(etkin==bas)bas = bas.sonraki;elseonceki.sonraki = etkin.sonraki;

    return etkin;}

  • 8/8/2019 Data Structures 3e

    62/93

    VER YAPILARI Blm 7 : Listeler ve Bal Listeler

    Y. Do. Dr. Aybars UUR 60

    public void listele(){ // Bal Listeyi Batan Sona ListelerSystem.out.println();System.out.print("Bastan Sona Liste : ");Dugum etkin = bas;while(etkin!=null)

    { etkin.yazdir(); etkin=etkin.sonraki; }}

    }

    // Bir bal liste oluturarak, Bliste ve Dugum// snflarn metotlaryla birlikte test eden snf

    class BListeTest{

    public static void main(String args[]){

    // liste adl bir bal liste nesnesi yaratrBListe liste = new BListe();

    liste.basaEkle(9);for(int i=8; i>=1; --i) liste.basaEkle(i);

    liste.listele();

    int deger = 5;

    Dugum d = liste.bul(deger);

    if(d==null)System.out.println("\n"+deger+" Listede Yok");

    elseSystem.out.println("\n"+deger+" Bulundu");

    Dugum s = liste.sil(5);

    liste.listele();

    }

    }

    Ekran kts :// Bastan Sona Liste : 1 2 3 4 5 6 7 8 9// 5 Bulundu// Bastan Sona Liste : 1 2 3 4 6 7 8 9

  • 8/8/2019 Data Structures 3e

    63/93

    VER YAPILARI Blm 8 : Algoritmalarn Karlatrlmas

    Y. Do. Dr. Aybars UUR 61

    BLM 8ALGORTMALARIN KARILATIRILMASI

    8.1 Giri

    Bir programn performans genel olarak programn iletimi iin gerekli olan bilgisayar zamanve belleidir. Bir programn zaman karmakl (time complexity) programn iletimsresidir. Bir programn yer karmakl (space complexity) programn iletildii srecegerekli olan yer miktardr. Bir problemin zmnde, kullanlabilecek olan algoritmalardanen etkin olan seilmelidir. En ksa srede zme ulaan veya en az ilem yapan algoritmatercih edilmelidir. Burada bilgisayarn yapt i nemlidir. Baz durumlarda da en az bellekharcayan algoritmann tercih edilmesi gerekebilir. Ayrca, programcnn yapt i asndanveya algoritmalarn anlalrlklar bakmndan da algoritmalar karlatrlabilir. Daha ksasrede biten bir algoritma yazmak iin daha ok kod yazmak veya daha ok bellek kullanmakgerekebilir (trade-off).

    Rakip algoritmalar yaptklar i asndan karlatrmak iin her algoritmaya

    uygulanabilecek somut ller tanmlanmaldr. Ayn ii yapan algoritmalardan daha azilemde sonuca ulaann (hzl olann) belirlenmesi yani daha genel olarak algoritma analiziteorik bilgisayar bilimlerinin nemli bir alandr.

    Yazlmclar, iki farkl algoritmann yaptklar ii nasl lp karlatrrlar? lk zmalgoritmalar bir programlama dilinde kodlayp her iki program da altrarak iletimsrelerini karlatrmaktr. letim sresi ksa olan daha iyi bir algoritma denilebilir mi? Buyntemde iletim sreleri belirli bir bilgisayara zeldir. Dolays ile iletim sresi de bubilgisayara baldr. Daha genel bir lm yapabilmek iin olas tm bilgisayarlar zerindealgoritmann altrlmas gerekir.

    kinci zm, iletilen komut ve deyimlerin saysn bulmaktr. Fakat bu lm kullanlan

    programlama diline gre ve programclarn stiline gre deiim gsterir. Bunun yerinealgoritmadaki kritik geilerin says hesaplanabilir. Her tekrar iin sabit bir i yaplyor vesabit bir sre geiyorsa, bu l anlaml hale gelir.

    Buradan, algoritmann temelinde yatan bir ilemi ayrarak, bu ilemin ka kere tekrarlandnbulma dncesi domutur. rnek olarak bir tamsay dizisindeki tm elemanlarn toplamnhesaplama ileminde gerekli olan i miktarn lmek iin tamsay toplama ilemlerinin saysbulunabilir. 100 elemanl bir dizideki elemanlarn toplamn bulmak iin 99 toplama ilemiyapmak gerekir. n elemanl bir listedeki elemanlarn toplamn bulmak iin n-1 toplama ilemiyapmak gerekir diye genelletirme yapabiliriz. Bylece algoritmalar karlatrrken belirlibir dizi boyutu ile snrl kalnmaz.

    ki gerel matrisin arpmnda kullanlan algoritmalarn karlatrlmas istendiinde, matrisarpm iin gereken gerel say arpma ve toplama ilemlerinin karm bir l olacaktr.Bu rnekten ilgin bir sonuca ulalr: Baz ilemlerin arl dierlerine gre fazladr. Birokbilgisayarda bilgisayar zaman cinsinden gerel say arpm gerel say toplamndan ok dahauzun srer. Dolays ile tm matris arpm dnldnde toplama ilemlerinin etkinlikzerindeki etkisi az olacandan ihmal edilebilirler. Sadece arpma ilemlerinin says dikkatealnabilir. Algoritma analizinde genelde algoritmada egemen olan bir ilem bulunur ve budierlerini grlt (noise) dzeyine indirger.

  • 8/8/2019 Data Structures 3e

    64/93

    VER YAPILARI Blm 8 : Algoritmalarn Karlatrlmas

    Y. Do. Dr. Aybars UUR 62

    8.2 Algoritmalarda Karmaklk (Complexity) ve Zaman Karmakl Analizi

    8.2.1 letim Zaman (Running Time)

    letim zamann girdi boyutunun bir fonksiyonu olarak ele almak tm geerli girdileri tek

    deere indirir. Bu da deiik algoritmalar karlatrmay kolaylatrr. En yaygn karmaklklleri Worst Case Running Time (en kt durum iletim sresi) ve Average-CaseRunning Time (ortalama durum iletim sresi)dir.

    Worst-Case Running Time :Bu iletim sresi, her girdi boyutundaki herhangi bir girdi iin en uzun iletim sresinitanmlar. rnek olarak bir programn en kt ihtimalle ne kadar sreceinin tahmin edilmesiistenen bir durumdur. n elemanl bir listede sral arama en kt ihtimalle (arananbulunamazsa) n karlatrma gerektirecektir. Yani worst-case running time (iletim zaman)T(n) = ndir. Tm problemlerde sadece en kt girdi dikkate alnd iin worst-case runningtime deerini hesaplamak greceli olarak kolaydr.

    Average-Case Running Time :Bu iletim sresi, her girdi boyutundaki tm girdilerin ortalamasdr. n elemann her birininaranma olaslnn eit olduu varsayldnda ve liste dndan bir eleman aranmayacavarsayldnda ortalama iletim sresi (n+1)/2dir. kinci varsaym kaldrldnda ortalamailetim sresi [(n+1)/2,n] aralndadr (aranan elemanlarn listede olma eilimine balolarak). Ortalama durum analizi basit varsaymlar yapldnda bile zordur ve varsaymlar dagerek performansn iyi tahminlenememesine neden olabilir.

    8.2.2 Asimptotik Analiz

    Algoritmalarn karlatrlmasnda asimptotik etkinlikleri de dikkate alnabilir. Girdi boyutu

    sonsuza yaklarken iletim sresinin art. Asimptotik gsterimin eleman olan 4 nemligsterim vardr : O-notation, o-notation, -notation, -notation. Burada sadece O gsterimizerinde durulacaktr. O gsterimi, fonksiyonlarn art orannn st snrn belirler. O(f(n)),f(n) fonksiyonundan daha hzl artmayan fonksiyonlar kmesini gsterir.

    8.2.2.1 Big-O Gsterimi (notasyonu)

    n elemanl bir listedeki elemanlarn toplamn bulmak iin n-1 toplama ilemi yapmak gerekirdiye genelletirme yapmtk. Yaplan ii, girdi boyutunun bir fonksiyonu olarak ele almolduk. Bu fonksiyon yaklamn matematiksel gsterim kullanarak ifade edebiliriz : Big-O (Oharfi, 0 says deil) gsterimi veya byklk derecesi (order of magnitude). Byklk

    derecesini problemin boyutuna bal olarak fonksiyonda en hzl art gsteren terim belirler.rnek olarak :

    f(n) = n4 + 100n2 + 10n + 50 = O(n4)

    fonksiyonunda n'in derecesi n4'tr yani n'in byk deerleri iin fonksiyonu en fazla n4 etkiler.Peki daha dk dereceli deyimlere ne olmaktadr? n'in ok byk deerleri iin n4,100n2'den, 10n'den ve 50'den ok byk olacandan daha dk dereceli terimler dikkate

  • 8/8/2019 Data Structures 3e

    65/93

    VER YAPILARI Blm 8 : Algoritmalarn Karlatrlmas

    Y. Do. Dr. Aybars UUR 63

    alnmayabilir. Bu dier terimlerin, ilem sresini etkilemedikleri anlamna gelmez; buyaklam yapldnda n'in ok byk deerlerinde nem tamadklar anlamna gelir.

    n, problemin boyutudur. Yt, liste, kuyruk, aa gibi veri yaplarnda eleman saylardr. nelemanl bir dizi gibi ...

    Bir listedeki tm elemanlarn dosyaya yazlmas iin ne kadar i yaplr : Cevap, listedekieleman saysna baldr.

    AlgoritmaOPEN (Rewrite) the fileWHILE more elements in list DO

    Print the next element

    lemi yapmak iin geen sre :(n*(Bir elemann dosyaya yazlmas iin geen sre))+dosyann almas srasnda geen sre

    Algoritma O(n)'dir (Algoritmann zaman karmakl O(n)dir) . nk, n tane ilem +

    sadece dosya almas ilemi vardr. Yzlerce elemann dosyaya kaydedildii dnlrse,dosya almas srasnda geen sre miktar rahatlkla ihmal edilebilir. Ama az sayda elemanvarsa dosya almas srasnda geen sre miktar nem tayabilir ve toplam sreye katlmdaha fazla olur.

    Bir algoritmann byklk derecesi, bilgisayarda iletildiinde sonucun ne kadar sredealnacan belirtmez. Bazen de bu tr bir bilgiye gereksinim duyulur. rnek olarak bir kelimeilemcinin 50 sayfalk bir yaz zerinde yazm denetimi yapma sresinin birka saniyedzeyinden fazla olmamas istenir. Byle bir bilgi istendiinde, Big-O analizi yerine dierlmler kullanlmaldr. Program deiik yntemlere gre kodlanr ve karlatrma yaplr.Programn altrlmasndan nce ve sonra bilgisayarn saati kaydedilir. ki saat arasndakifark alnarak geen sre bulunur. Bu tr bir "Benchmark" testi, ilemlerin belirli bir

    bilgisayarda belirli bir ilemci ve belirli kaynaklar kullanlarak ne kadar srdn gsterir.

    Bilgisayarn yapt iin programn boyutu ile, rnek olarak satr says ile ilgili olmasgerekmez. N elemanl bir diziyi 0layan iki program da O(n) olduu halde kaynak kodlarnnsatr saylar olduka farkldr :

    Program 1 :

    dizi[0] = 0;dizi[1] = 0;dizi[2] = 0;

    dizi[3] = 0;.....................dizi[n-1] = 0;

    Program 2 :

    for(int i=0; i

  • 8/8/2019 Data Structures 3e

    66/93

    VER YAPILARI Blm 8 : Algoritmalarn Karlatrlmas

    Y. Do. Dr. Aybars UUR 64

    1den ne kadar olan saylarn toplamn hesaplayan iki ksa program dnelim :

    Program 1, O(n)dir. n=50 olursa programn almas srasnda n=5 iin harcanan sreninyaklak 10 kat sre harcanacaktr. Program 2 ise O(1)dir. n=1 de olsa n=50de olsa programayn srede biter.

    8.2.2.2 Art Oran Fonksiyonlar

    Yaygn olarak kullanlan baz art oran fonksiyonlar ekil 8.1de gsterilmektedir.

    ekil 8.1 : Yaygn art oranlar

    O(1) : Sabit zamanrnek : n elemanl bir dizinin i. elemanna bir deer atanmas O(1)dir. nk bir elemanaindisinden dorudan eriilmektedir.O(n) : Dorusal zamanrnek : n elemanl bir dizinin tm elemanlarnn ekrana yazdrlmas O(n)dir.rnek : sral olmayan bir dizideki (listedeki) elemanlardan birinin aranmas O(n)dir (en ktdurumda da, ortalama durumda da).O(log2n) : O(1)den fazla O(n)den azdr.rnek : Sral bir listenin elemanlar iinde ikili arama (binary search) uygulanarak belirli birdeerin aranmas O(log2n)dir.O(n2) : kinci dereceli zamanrnek : Basit sralama algoritmalarnn birou (selection sort gibi) O(n2)dir.O(n log2n) : Baz hzl sralama algoritmalar O(n log2n)dir.O(n3) : Kbik zamanrnek : boyutlu bir tamsay tablosundaki her elemann deerini artran algoritma.O(2n) : stel zaman, ok byk deerlere ular.

    Program 1 :

    toplam = 0;for(int i=0; i

  • 8/8/2019 Data Structures 3e

    67/93

    VER YAPILARI Blm 8 : Algoritmalarn Karlatrlmas

    Y. Do. Dr. Aybars UUR 65

    8.2.2.3 Pratikte Karmaklk

    Deiik art fonksiyonlarnn aldklar deerlere gre bir tablo, ekil 8.2de gsterilmitir.

    ekil 8.2 : Deiik fonksiyonlarn f(n) deiik girdi boyutlarna (n) gre deerleri

    Bir programn iletimi n3 adm sryorsa, ve n=1000 ise, program 10003 adm srecekdemektir. Yani 1 000 000 000 (bir milyar) adm.Kullanlan bilgisayar saniyede 1 000 000 000 adm gerekletirebilecek kadar hzl ise bu

    program tam 1 saniye srecektir.

    ekil 8.2deki fonksiyonlardan elde edilmi bir grafik ekil 8.3te grlmektedir.

    ekil 8.3 : Deiik fonksiyonlarn grafikleri

    logn n nlogn n2 n3 2n

    0 1 0 1 1 21 2 2 4 8 42 4 8 16 84 163 8 24 64 512 2564 16 64 256 4096 655365 32 160 1024 32768 4294967

    296

    0

    10

    20

    30

    40

    50

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

    n

    f(n)

    log2n

    n

    n log2n

    n22nn3

  • 8/8/2019 Data Structures 3e

    68/93

    VER YAPILARI Blm 9 : Sralama

    Y. Do. Dr. Aybars UUR 66

    BLM 9SIRALAMA (SORTING)

    9.1 Giri

    Sralama ve arama tekniklerinden pek ok programda yararlanlmaktadr. Gnlkyaammzda elemanlarn sral tutulduu listeler yaygn olarak kullanlmaktadr. Telefonrehberindeki bir kiinin telefon numarasnn bulunmas bir arama (search) ilemidir. Telefonrehberlerindeki kaytlar kiilerin soyadlarna gre sraldr. Bir telefon numarasnn kime aitolduunu bulmaya almak da bir baka arama ilemidir. Eer telefon rehberi kiilerinsoyadlarna gre alfabetik olarak deil de telefon numaralarna gre kronolojik olarak sralolursa bu, arama ilemini basitletirir. Ktphanelerdeki kitaplarn zel yntemlere gresralanarak raflara dizilmesi, bilgisayarn belleindeki saylarn sralanmas da yaplacakarama ilemlerini hzlandrr ve kolaylatrr. Genel olarak eleman topluluklar, bilgisayardada, telefon rehberi gibi rneklerde de daha etkin erimek (aramak ve bilgi getirmek) zeresralanr ve sral tutulurlar.

    Eleman (kayt, yap ...) topluluklar genelde (her zaman deil) bir anahtara gre sraltutulurlar. Bu anahtar genelde elemanlarn bir alt alan yani yesidir (Elemanlar soyada gresral olursa soyad anahtardr, numaraya gre sral olursa numara anahtardr, nota gre olursanot alan anahtardr). Elemanlar topluluu iindeki her elemann anahtar deeri kendindennce gelen elemann anahtar deerinden bykse artan srada, kkse azalan srada sraldrdenilir (ilgili anahtara gre).

    Sralama, sralanacak elemanlar bellekte ise internal (isel), kaytlarn bazlar ikincil bellekortamndaysa external (dsal) sralama olarak adlandrlr.

    Sralama ve arama arasnda bir iliki olduundan bir uygulamada ilk soru sralama gereklimidir? olmaldr. Arama ilemleri youn ise, sralamann veya o ekilde tutmann getirecei

    yk, sral olmayan kaytlar zerindeki arama ilemlerinin getirecei toplam yk yannda okhafif kalacaktr. Bu karar verilirse, arkasndan sralamann nasl yaplaca ve hangi sralamayntemlerinin kullanlaca kararlatrlmaldr. Bunun nedeni, tm dier yntemlerden stnevrensel bir sralama tekniinin olmamasndandr.

  • 8/8/2019 Data Structures 3e

    69/93

    VER YAPILARI Blm 9 : Sralama

    Y. Do. Dr. Aybars UUR 67

    9.2 SIRALAMA TEKNKLERNN ETKNLKLER ve ANALZ

    9.2.1 Bubble Sort (Exchange Sorts kapsamnda)

    Bubble sort, sralama teknikleri iinde anlalmas ve programlanmas kolay olmasna ramen

    etkinlii en az olan algoritmalardandr (n elemanl x dizisi iin) :

    void bubble(int x[], int n){int hold, j, pass; int switched = TRUE;

    for (pass=0; pass

  • 8/8/2019 Data Structures 3e

    70/93

    VER YAPILARI Blm 9 : Sralama

    Y. Do. Dr. Aybars UUR 68

    9.2.2 Quicksort (Exchange Sorts kapsamnda)

    #include

    void qsort2(double *left, double *right)

    { double *p = left, *q = right, w, x=*(left+(right-left>>1));do{while(*px) q--;if(p>q) break;w = *p; *p = *q; *q = w;

    } while(++p

  • 8/8/2019 Data Structures 3e

    71/93

    VER YAPILARI Blm 9 : Sralama

    Y. Do. Dr. Aybars UUR 69

    9.2.3 Straight Selection Sort (Selection Sorts kapsamnda)

    Elemanlarn seilerek uygun yerlerine konulmas ile gerekletirilen bir sralamadr :

    void selectsort(int x[], int n){

    int i, indx, j, large;for(i=n-1; i>0; i--){large = x[0];indx = 0;for(j=1; jlarge){large = x[j];indx = j;

    };x[indx] = x[i];

    x[i] = large;};}

    Veriler : 25 57 48 37 12 92 86 33Tekrar 1 : 25 57 48 37 12 33 86 92Tekrar 2 : 25 57 48 37 12 33 86 92Tekrar 3 : 25 33 48 37 12 57 86 92Tekrar 4 : 25 33 12 37 48 57 86 92Tekrar 5 : 25 33 12 37 48 57 86 92Tekrar 6 : 25 12 33 37 48 57 86 92Tekrar 7 : 12 25 33 37 48 57 86 92

    Selection Sort'un analizi dorudandr.1. turda (n-1),2. turda (n-2),3. ...(n-1). Turda 1, karlatrma yaplmaktadr.

    Toplam karlatrma says = (n-1)+(n-2)+...+1 = n*(n-1)/2= (1/2)n2-(1/2)n = O(n2)

  • 8/8/2019 Data Structures 3e

    72/93

    VER YAPILARI Blm 9 : Sralama

    Y. Do. Dr. Aybars UUR 70

    9.2.4 Simple Insertion Sort (Insertion Sorts kapsamnda)

    Elemanlarn srasna uygun olarak listeye tek tek eklenmesi ile gerekletirilen sralamadr :

    void insertsort(int x[], int n){

    int i,k,y;for(k=1; k=0 && y

  • 8/8/2019 Data Structures 3e

    73/93

    VER YAPILARI Blm 9 : Sralama

    Y. Do. Dr. Aybars UUR 71

    9.2.5 Merge Sort (Merge Sorts kapsamnda)

    Sral iki veri grubunu birletirerek nc bir sral veri grubu elde etmeye dayanr.

    #include #define numelts 8

    void mergesort(int x[], int n){int aux[numelts], i,j,k,l1,l2,size,u1,u2;size = 1;while(size

  • 8/8/2019 Data Structures 3e

    74/93

    VER YAPILARI Blm 10 : ZGELER ve Uygulamalar

    Y. Do. Dr. Aybars UUR 72

    BLM 10ZGELER (GRAPHS) ve UYGULAMALARI

    10.1 Terminoloji

    izge (Graph) : Ke (vertex) ad verilen dmlerden ve kenar (edge) ad verilip keleri

    birbirine balayan balantlardan oluan veri yapsdr. Aynen aalar gibi izgeler dedorusal olmayan veri yaplar grubuna girerler.

    graph G=(V,E), sonlu V ve E elemanlar kmesidir.

    Vnin elemanlar keler (vertices) olarak adlandrlr. Enin elemanlar da kenarlar (edges)olarak adlandrlr. Enin iindeki her kenar V iindeki iki farkl keyi birletirir. Bir izgedekeler dairelerle, kenarlar da izgilerle gsterilir (ekil 10.1).

    ekil 10.1 : izge

    Ynsz Kenar (undirected edge) : izgi eklinde yn belirtilmeyen kenarlar ynsz

    kenarlardr. Ynsz kenarlarda (v1,v2) olmas ile (v2,v1) olmas arasnda fark yoktur. rnekler:ekil 10.1deki izgedeki kenarlar.

    Ynl Kenar (directed edge) : Ok eklinde gsterilen kenarlar ynl kenarlardr (ekil10.2). (i,j)de okun ba ikinci keyi (j), okun kuyruu birinci keyi (i) gsterir. Bazkitaplarda eklinde gsterilir.

    ekil 10.2 : Ynl ve Bal izge

    v1

    v2 v3

    v4

    e1 e2

    e3

    e4

    G=(V,E)

    V={v1,v2,v3,v4}E={(v1,v2),(v1,v3),(v3,v4),(v1,v4)}e1=(v1,v2)e2=(v1,v3)e3=(v3,v4)e4=(v1,v4)E={e1,e2,e3,e4}

    1

    2 3

    4

    G1=(V,E)V1={1,2,3,4}E1={(1,2),(1,3),(1,4),(4,3)}

  • 8/8/2019 Data Structures 3e

    75/93

    VER YAPILARI Blm 10 : ZGELER ve Uygulamalar

    Y. Do. Dr. Aybars UUR 73

    Komu Keler (Adjacent) : Aralarnda dorudan balant (kenar) bulunan i ve j kelerikomudur. Dier ke iftleri komu deildir. rnek : (ekil 10.1de) v1 ve v2; v1 ve v3; v1ve v4; v3 ve v4 ke iftleri komudur.

    Balant (incident) : Komu i ve j keleri arasndaki kenar (i,j) balantdr.

    Bir Kenin Derecesi (degree) : Bir keye bal olan kenarlarn saysdr. ekil 10.1dev1in derecesi 3, v2nin derecesi 1, v3n derecesi 2, v4n derecesi 2dir.

    Indegree, Outdegree : Ynl izgede, ynl kenar (i,j), j kesine gelendir (incident to), ikesinden kandr (incident from). Bir keye gelenlerin saysna indegree, bir kedenkanlarn saysna outdegree denilir. ekil 10.2deki kelerin indegree ve outdegreelerinibulunuz.

    Ynsz izge (undirected graph) : Tm kenarlar ynsz olan izgeye ynsz izge denilir.Ynsz izgede bir ke ifti arasnda en fazla bir kenar olabilir.

    Ynl izge (directed graph, digraph) : Tm kenarlar ynl olan izgeye ynl izge ad

    verilir. Ynl izgede bir ke ifti arasnda ters ynlerde olmak zere en fazla iki kenarolabilir.

    Dng (Loop) : (i,i) eklinde gsterilen ve bir keyi kendine balayan kenar.

    Arlkl izge (weighted graph) : Her kenara bir arlk (weight) veya maliyet (cost)deerinin atand izge (ekil 10.3).

    ekil 10.3 : Arlkl izge

    Yol (path) : G(V,E) izgesinde i1 ve ik keleri arasnda P=i1,i2,...,ik eklinde belirtilenkeler dizisi (Ede, 1

  • 8/8/2019 Data Structures 3e

    76/93

    VER YAPILARI Blm 10 : ZGELER ve Uygulamalar

    Y. Do. Dr. Aybars UUR 74

    Alt izge (Subgraph) : H izgesinin ke ve kenarlar G izgesinin ke ve kenarlarnn altkmesi ise; H izgesi G izgesinin alt izgesidir (subgraph).

    Daire veya devir (Cycle) : Balang ve biti keleri ayn olan basit yol. ekil 10.3teZMR STANBUL ANKARA ZMR.

    Aa (tree) : Daire iermeyen ynsz bal izge.

    Spanning Tree : Gnin tm kelerini ieren bir aa eklindeki alt izgelerden her biri.

    Forest : Bal olma zorunluluu olmayan aa.

    Complete Graph : n ke says olmak zere n*(n-1)/2 kenar olan izge (kendilerinebalant yok). eklini dnnz, 1,2,3,4 ke saylar iin.

    Complete Digraph : n ke says olmak zere n*(n-1) kenar olan izge.

    10.2 izgelerin Kullanm Alanlar

    Bilgisayar Alarnda, elektriksel ve dier alarn analizinde, kimyasal bileiklerin molekleryaplarnn aratrlmasnda, ulam alarnda (kara, deniz ve havayollar), planlamaprojelerinde, sosyal alanlarda ve dier pek ok alanda kullanlmaktadr.

  • 8/8/2019 Data Structures 3e

    77/93

    VER YAPILARI Javada Hazr Veri Yaplar ve Koleksiyonlar

    Y. Do. Dr. Aybars UUR 75

    EK 1JAVA'DA HAZIR VER YAPILARI ve KOLEKSYONLAR

    Javada veri yaplar dier dillerde olduu gibi programlanarak oluturulabildii gibi, dilde olan hazrveri yaplar da kullanlabilir.

    Collection (koleksiyon), dier verileri tutabilen veriyapsdr. Koleksiyon arayzleri (collection interfaces),her tr koleksiyonda yaplabilecek ilemleri tanmlar.Koleksiyon gerekletirimleri (collectionimplementations), bu ilemleri eitli yollarlagerekletirir. Baz arayzler : Set, List, Map olupJava.util paketi iindedirler.

    Arayzler

    Liste (List) : Sral bir tr koleksiyondur. Tekrarlelemanlar ierebilir. Listeler 0. elemandan balar.Koleksiyondan devrald zellikler dnda, indislerinegre elemanlar ileme (sort,...), eleman arama(binarySearch) ve elemanlar zerinde dola ma gibi metotlar (ListIterator) da vardr. Liste arayz,ArrayList, LinkedList ve Vector snflar ilegerekletirilir. ArrayList snf, boyutudeitirilebilen dizidir ve Vector snfndan hzlalr. LinkedList snf ise bal listegerekletirimidir. ok sayda metot devralmaktadrlar.ift bal liste, kuyruk, yt (yt iin Javada ayrcasnf da vardr) vs. de gerekletirilebilmektedir.

    Kme (Set) : Kme, elemanlar tek (tekrar olmadan) tutankoleksiyon tipinde veri yapsdr. ki nemli Kmegerekletirimi : HashSet ve TreeSettir. HashSet,elemanlarn Hash tablosunda tutar, TreeSet ise aatatutar.

  • 8/8/2019 Data Structures 3e

    78/93

    VER YAPILARI Javada Hazr Veri Yaplar ve Koleksiyonlar

    Y. Do. Dr. Aybars UUR 76

    JAVA RNEK (bsearch.java) : Sralama, kili Arama

    import java.util.*;import java.awt.*;import java.awt.event.*;

    import javax.swing.*;

    public class bsearch extends JFrame{public bsearch(){

    super("BSearch Ornek");

    Container c = getContentPane();c.setLayout(new FlowLayout());final JTextField tfoutput = new JTextField(10);c.add(tfoutput);

    // int a[] = new int[10];// float, char, ... iin de yaplabilir.

    int a[] = { 4,2,1,8,6,7,9,15,11 };Arrays.sort(a);int ind = Arrays.binarySearch(a,4);

    tfoutput.setText(""+ind);

    setSize(200,150); show();}

    public static void main ( String args[] ){bsearch app = new bsearch();app.addWindowListener(new WindowAdapter(){

    public void windowClosing(WindowEvent e){

    System.exit(0);}

    });

    }}

  • 8/8/2019 Data Structures 3e

    79/93

    VER YAPILARI Javada Hazr Veri Yaplar ve Koleksiyonlar

    Y. Do. Dr. Aybars UUR 77

    ekil 1 :Dizi sralandktan (sort metodu ile) sonra

    1,2,4,6,7,8,9,11,15iinde (binarySearch metodu ile) 4 deeri

    aranmaktadr.Dizi iindeki konumu (2) metin kutusuna yazdrlr.

  • 8/8/2019 Data Structures 3e

    80/93

    VER YAPILARI Javada Hazr Veri Yaplar ve Koleksiyonlar

    Y. Do. Dr. Aybars UUR 78

    JAVA RNEK (SortedSetTest.java) : Aa

    import java.util.*;

    public class SortedSetTest {

    private static String names[] = { "yellow","green","black","tan","grey","white","orange","red","green"};

    public SortedSetTest(){

    TreeSet m = new TreeSet(Arrays.asList(names));System.out.println("Set: ");printSet(m);

    System.out.print("orange'dan ncekiler :");printSet(m.headSet("orange"));System.out.print("orange'dan sonrakiler:");printSet(m.tailSet("orange"));

    System.out.println("lk eleman :"+m.first());System.out.println("Son eleman :"+m.last());

    }

    public void printSet(SortedSet setRef){

    Iterator i = setRef.iterator();while(i.hasNext())System.out.print(i.next()+" ");

    System.out.println();}

    public static void main(String args[]){ new SortedSetTest(); }

    }

    Ekran kts :Set:black green grey orange red tan white yelloworange'dan ncekiler :black green greyorange'dan sonrakiler:orange red tan white yellowlk eleman :blackSon eleman :yellow

  • 8/8/2019 Data Structures 3e

    81/93

    VER YAPILARI C# Programlama

    Y. Do. Dr. Aybars UUR 79

    EK 2C# PROGRAMLAMA ve RNEKLER

    C# Programnn letimi (CMD Konsol)

    Aadaki program herhangi bir isim ile kaydedilir (Ornek1.cs gibi). csc Ornek1.cs komutu verilerek derlenir. (path ayar!). Ornek1 program altrlr.

    C# Programnn letimi (IDE Konsol)

    New Project Visual C# Projects Console Application

    using System;

    class Merhaba{static void Main (string[] args)

    { Console.WriteLine("Merhaba");}

    }

  • 8/8/2019 Data Structures 3e

    82/93

    VER YAPILARI C# Programlama

    Y. Do. Dr. Aybars UUR 80

    C# Programnn letimi (Windows)

    New Project Visual C# Projects Windows Application

    ki Etiket

    Metin Kutusu

    Bir Dme eklenir.

    ...... Dme iin aadaki kod yazlr:

    private void button1_Click(object sender, System.EventArgs e)

    {

    textBox3.Text = "" + (Double.Parse (textBox2.Text) +

    Double.Parse (textBox1.Text));

    }

    Snf rnei : Rasyonel Say Snf ve Kullanm

    using System;

    class rasyonel_sayi{long pay;long payda;

    public rasyonel_sayi(){ pay = 2; payda = 3; }

    public rasyonel_sayi(long pay, long payda){ this.pay = pay; this.payda = payda; }

    public void yazdir(){ Console.WriteLine("{0}/{1}",pay,payda); }

    }

    class main{

    public static void Main(){rasyonel_sayi r1 = new rasyonel_sayi();r1.yazdir();

    }}

    Sonu : 2/3

  • 8/8/2019 Data Structures 3e

    83/93

    VER YAPILARI C# Programlama

    Y. Do. Dr. Aybars UUR 81

    C# : Diziler

    RNEK 1)

    using System;

    class Test{static void Main() {int[] arr = new int[5];for (int i = 0; i < arr.Length; i++)arr[i] = i * i;

    for (int i = 0; i < arr.Length; i++)Console.WriteLine("arr[{0}] = {1}", i, arr[i]);

    }}

    RNEK 2)

    class Test{static void Main() {int[] a1; // single-dimensional array of intint[,] a2; // 2-dimensional array of intint[,,] a3; // 3-dimensional array of intint[][] j2; // "jagged" array:arrayof(array of int)int[][][] j3; // array of (array of (array of

    int))}

    }

    Ekran kts :arr[0] = 0arr[1] = 1arr[2] = 4arr[3] = 9arr[4] = 16

  • 8/8/2019 Data Structures 3e

    84/93

    VER YAPILARI C# Programlama

    Y. Do. Dr. Aybars UUR 82

    RNEK 3)

    int[] tamsayi = { 5, 10, 15 };

    tamsayi

    string[] str = new string[3];

    double[,] cift_duyarlik = new double[2, 2];

    bool[][] isEmpty = new bool[2][];isEmpty[0] = new bool[2];

    isEmpty[1] = new bool[1];

    5 10 15

    15.12 7.64

    56.01 -3.9

    cift_duyarlik

    true false

    false

    isEmpty

    Ali

    Cemile

    Veli

    str

  • 8/8/2019 Data Structures 3e

    85/93

    VER YAPILARI C# Programlama

    Y. Do. Dr. Aybars UUR 83

    C# : ZYNELEME RNE (Faktryel)

    using System;

    using System.Drawing;

    using System.Collections;

    using System.ComponentModel;

    using System.Win