Bölüm 4. Kuyruk Olcay Taner Yıldız 2014 O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 1 / 22 Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası Sabit Dizi ile Kuyruk Tanımı O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 2 / 22 Tam sayılar içeren sabit dizi ile bir kuyruk uygulaması Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class Kuyruk{ Ornek dizi []; int bas; int son; int N; public Kuyruk(int N){ dizi = new Ornek[N]; this.N = N; bas = 0; son = 0; } boolean kuyrukDolu(){ if (bas == (son + 1) % N) return true; else return false; } boolean kuyrukBos(){ if (bas == son) return true; else return false; } } O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 3 / 22 Azami 12 eleman alabilen bir kuyruk yapısı Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 15 baş O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 6 9 8 4 son 4 / 22 Önceki şekilde verilen kuyruk yapısına 17 ve 3 elemanlarının eklenmesi Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 3 son 15 6 9 8 4 17 baş O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 5 / 22 Sabit dizi ile uygulanan bir kuyruğa yeni bir eleman ekleyen algoritma Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 1 2 3 4 5 6 void kuyrugaEkle(Ornek yeni){ if (!kuyrukDolu()){ dizi [son] = yeni; son = (son + 1) % N; } } O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 6 / 22 Önceki şekilde verilen kuyruk yapısından 15’in silinmesi Sabit Dizi ile Kuyruk Tanımı 15 Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası baş O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 6 9 8 4 son 7 / 22 Sabit dizi ile uygulanmış bir kuyruktan eleman silen ve o elemanı döndüren algoritma Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 1 2 3 4 5 6 7 8 9 Ornek kuyrukSil(){ Ornek sonuc; if (!kuyrukBos()){ sonuc = dizi [bas]; bas = (bas + 1) % N; return sonuc; } return null; } O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 8 / 22 Kuyruk İşlemleri (Dizi) Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Ekleme: O(1) ● Silme: O(1) ● Uygulama: Hedef Tahtası O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 9 / 22 Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası Bağlı Liste ile Kuyruk Tanımı O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 10 / 22 Tam sayılar içeren bağlı liste ile bir kuyruk uygulaması Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class Kuyruk{ Eleman bas; Eleman son; public Kuyruk(){ bas = null; son = null; } boolean kuyrukBos(){ if (bas == NULL) return true; else return false; } } O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 11 / 22 5 eleman içeren ve bağlı liste ile tanımlanmış kuyruk yapısı Sabit Dizi ile Kuyruk Tanımı 15 Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 6 baş O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 9 8 4 son 12 / 22 Önceki şekilde verilen kuyruk yapısına 17’nin eklenmesi Sabit Dizi ile Kuyruk Tanımı 15 Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 6 9 baş O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 8 4 17 son 13 / 22 Bağlı liste ile uygulanan bir kuyruğa yeni bir eleman ekleyen algoritma Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 1 2 3 4 5 6 7 void kuyrugaEkle(Eleman yeni){ if (!kuyrukBos()) son. ileri = yeni; else bas = yeni; son = yeni; } O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 14 / 22 Önceki şekilde verilen kuyruk yapısından 15’in silinmesi Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı 15 Uygulama: Hedef Tahtası 6 9 baş O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 8 4 son 15 / 22 Bağlı liste ile uygulanmış bir kuyruktan eleman silen ve o elemanı döndüren algoritma Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 1 2 3 4 5 6 7 8 9 10 Eleman kuyrukSil(){ Eleman sonuc; sonuc = bas; if (!kuyrukBos()){ bas = bas. ileri ; if (bas == null) son = null; } return sonuc; } O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 16 / 22 Kuyruk İşlemleri (Bağlı Liste) Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Ekleme: O(1) ● Silme: O(1) ● Uygulama: Hedef Tahtası O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 17 / 22 Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası Uygulama: Hedef Tahtası O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 18 / 22 Örnek bir hedef tahtası ve yapılan 5 atışta 100 elde edilmesi Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 36 33 27 21 36 33 27 21 11 11 O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 19 / 22 Hedef tahtası probleminde geniş arama yönteminin iki aşamasının uygulanması 0 11 21 27 33 36 22 32 38 44 47 32 42 48 54 57 38 48 54 60 63 44 54 60 66 69 47 57 63 69 72 O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 20 / 22 Hedef tahtası probleminde bir durumun tanımı Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 1 2 3 4 5 6 7 8 9 10 public class Eleman{ int toplam; String atis ; Eleman ileri ; public Eleman(int toplam, String atis){ this.toplam = toplam; this.atis = atis ; ileri = null; } } O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 21 / 22 Hedef tahtası probleminin geniş arama yöntemiyle çözümü Sabit Dizi ile Kuyruk Tanımı Bağlı Liste ile Kuyruk Tanımı Uygulama: Hedef Tahtası 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 String hedefTahtasi(int[] tahta){ int i, t ; String a; Eleman e; Kuyruk k; e = new Eleman(0, ""); k = new Kuyruk(); k.kuyrugaEkle(e); while (!k.kuyrukBos()){ e = k.kuyrukSil (); if (e.toplam == 100) return e.atis; for (i = 0; i < tahta.length; i ++){ if (e.toplam + tahta[ i ] <=100){ t = e.toplam + tahta[ i ]; a = e. atis + " " + tahta[ i ]; e = new Eleman(t, a); k.kuyrugaEkle(e); } } } return null; } O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013 22 / 22