YZM 2116
Veri Yapıları
Yrd. Doç. Dr. Deniz KILINÇ
Celal Bayar Üniversitesi
Hasan Ferdi Turgutlu Teknoloji Fakültesi
Yazılım Mühendisliği
BÖLÜM - 9
Bu bölümde,
• Hatırlatmalar
• Tam İkili Ağaç
• Eksiksiz İkili Ağaç
• Dizi Kullanarak İkili Ağaç Gerçekleştirimi
• Heap, Max Heap, Min Heap
• Öncelik Kuyruğu
• HeapSort
konusuna değinilecektir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Hatırlatmalar…
• Tam İkili Ağaç (Full Binary Tree)
• Eksiksiz İkili Ağaç (Complete Binary Tree)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Neydi?
4Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Tam İkili Ağaç (Full Binary Tree)
• Her bir düğümün (i)net olarak iki çocuk düğüme
sahip olduğu ve (ii)yaprak düğümlerin aynı
seviyede olduğu ikili ağaçtır.
• Her düğüm, eşit şekilde sağ ve sol alt-ağaçlara
sahiptir.
5Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Eksiksiz İkili Ağaç (Complete Binary Tree)
• Son seviye dışındaki tüm seviyelerin tam (full)
olduğu ikili ağaç türüdür.
• Düğümleri sol taraftan (düğüme göre) doldurulur.
• Yeni bir derinliğe soldan sağa doğru ekleme
başlanır.
6Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Eksiksiz İkili Ağaç (Complete Binary Tree) (devam…)
7Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
SORU
DİZİ KULLANARAK İKİLİ AĞAÇ
GERÇEKLEŞTİREBİLİR MİYİZ?
8Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Dizi Kullanarak İkili Ağaç Gerçekleştirimi
• Bellek kullanım tasarrufu sağlar (işaretçi yok vs.).
• Düğümler arası linkler olmadığı halde, ağaç
üzerindeki düğümlerde aile ilişkisi korunur
(parent-child).
• Gezinmeyi basitleştirir.
• Veriyi Saklama Şekli
i. Seviye-seviye (level-by-level)
ii. Soldan-sağa (left-to-right)
9Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)
Soru: Aşağıdaki ikili ağacı dizide nasıl tutarız?
10Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)
Cevap: Kök’ü 0’dan başlatarak, sol-sağ kolları her seviyede
dizi indisleri şeklinde arttırarak numaralayıp diziye atabiliriz.
11Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)
0
1 2
43 5 6
7 8 9
12Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)
• tree.nodes[index] düğümü ifade etmek üzere
• Parent-child ilişkisi:
– Sol çocuk = tree.nodes[2*index+1]
– Sağ çocuk = tree.nodes[2*index+2]
– Parent düğüm = tree.nodes[(index-1)/2]
• Yaprak düğümler:
– tree.nodes[numElements/2] - tree.nodes[numElements-1]
(tam sayı bölüm)
13Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)
Örnek: 1 indisli D düğümü için …
Sol çocuk indisi ([2*index+1]): 3
Sağ çocuk indisi ([2*index+2]): 4
Parent indisi([(index-1)/2]): 00
1 2
43 5 6
7 8 9
14Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…)
• Tam veya eksiksiz ikili ağaçlar, diziler ile çok basit
ve etkin şekilde gerçekleştirilebilirler.
• Dizide boş alan kalmaz.
• Tam tersi
durumdaki ikili
ağaçlarda
mutlaka boş yer
kullanmak
gerekir.
15Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Heap Nedir?
• Aşağıdaki özelliklere sahip ikili ağaçtır:
– Özellik 1: Eksiksiz (complete) ikili ağaçtır.
– Özellik 2 (Heap özelliği): Ebeveyn (parent)
düğümün değeri her zaman çocukların değerinden
büyük (küçük) veya eşittir.
• Max Heap: Kök en büyük değere sahiptir.
• Min Heap: Kök en küçük değere sahiptir.
16Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Max ve Min Heap
Max HeapMin Heap
17Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Heap Gerçekleştirimi
19
4222127
23
45
35
Heap h = new Heap(100);
h.Insert(45);
h.Insert(35);
h.Insert(23);
h.Insert(27);
h.Insert(21);
h.Insert(22);
h.Insert(4);
h.Insert(19);
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Heap Oluşturma
• Adım 1: Yeni düğümü
seviye-seviye soldan-
sağa olacak şekilde ilk
uygun yere ekle.
19
4222127
23
45
35
42
Heap Insert(42)
• Adım 2: Eklenen yeni
düğümü, ebeveyn ile
karşılaştırarak yukarı
doğru taşı.
• Adım 3: Uygun yer
bulana kadar Adım 2
tekrarla.
19
4222142
23
45
35
27
Heap Insert(42)
19
4222135
23
45
42
27
Heap Insert(42)
• Adım 2: Eklenen yeni
düğümü, ebeveyn ile
karşılaştırarak yukarı
doğru taşı.
• Adım 3: Uygun yer
bulana kadar Adım 2
tekrarla.
Heap Insert Gerçekleştirimi
Max Elemanı Silme (RemoveMax)
19
4222135
23
45
42
27
• Adım 1: Son eleman
kök eleman yerine
taşınır.
• Örnekte, 27 elemanı
köke taşınır.
19
4222135
23
27
42
Max Elemanı Silme (RemoveMax)
• Adım 1: Tamamlandı.
Ancak, Heap
özelliğinin tekrar
kurulması gerekiyor.
19
4222135
23
27
42
Max Elemanı Silme (RemoveMax)
• Adım 2: Eklenen yeni
düğümü, büyük
çocuğu ile yer
değiştirecek şekilde
aşağıya doğru taşı.
19
4222135
23
42
27
• Adım 2: Eklenen yeni
düğümü, büyük çocuğu
ile yer değiştirecek
şekilde aşağıya doğru
taşı.
• Adım 3: Adım 2’yi
tekrarla.
Max Elemanı Silme (RemoveMax)
19
4222127
23
42
35
• Adım 2: Eklenen yeni
düğümü, büyük çocuğu
ile yer değiştirecek
şekilde aşağıya doğru
taşı.
• Adım 3: Adım 2’yi
tekrarla.
Max Elemanı Silme (RemoveMax)
Heap RemoveMax Gerçekleştirimi
Heap RemoveMax Gerçekleştirimi
Heap Ağacı Uygulamaları
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Öncelik Kuyruğu (Priority Queue)
Heap Sıralama Algoritması (Heap Sort)
Öncelik Kuyruğu
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Öncelik kuyrukları,
• artan ve azalan
olmak üzere ikiye ayrılırlar.
• Diğer veri yapılarında olduğu gibi kuyrukta
bulunan elemanlar, string veya integer gibi
basit veri türünde olabileceği gibi özelliklere
(attribute) sahip bir nesne de olabilir.
• Öncelik kriterinin ne olacağı kuyruktan kuyruğa
değişkenlik gösterir.
• Kuyruğa eklenen elemanın kendisi veya
herhangi bir özelliği, öncelik kriteri olabilir.
Öncelik Kuyruğu (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Örneğin; telefon rehberi uygulamasında,
• Kuyruktaki her eleman soyad, ad, adres ve telefon
numarası özelliklerinden oluşmakta ve kuyruk
soyada göre sıralanmaktadır.
• Öncelik kuyrukları;
• Dizi
• Bağlı Liste
• Binary Heap
kullanılarak implemente edilebilir.
Öncelik Kuyruğu (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Öncelik kuyruğunu gerçekleştirmek için
• Heap gerçekleştirimindeki:
o Insert() ve
o RemoveMax()
fonksiyonlarını aynen veya biraz değişiklikle
kullanabiliriz.
Queue İşlem Karmaşıklığı
İşlem Dizi
Öncelik
Kuyruğu
Heap
Öncelik
Kuyruğu
Insert O(n) O(logn)
Remove O(1) O(logn)
Heap Sort
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Heap ağacı kullanarak nasıl sıralama yaparız?
Adım 1: Heap ağacı oluştur ve sıralanmamış
diziyi okuyarak, her bir elemanı ağaca ekle.
Adım 2:
1. Ağacın en büyük elemanını oku.
2. Elemanı yeni bir diziye ata.
3. Ağacı yeniden oluştur.
4. İlk 3 adımı ağaçta eleman kalmayana kadar
tekrarla.
Heap Sort (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Heap Sort (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Big O karmaşıklığı nedir?
O(nlogn)
Örnek Sorular
İYİ ÇALIŞMALAR…
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Yararlanılan Kaynaklar
• Ders Kitabı:
• Data Structures through JAVA, V.V.Muniswamy
• Yardımcı Okumalar:
• Data Structures and Algorithms in Java, Narashima
Karumanchi
• Data Structures, Algorithms and Applications in Java,
Sartaj Sahni
• Algorithms, Robert Sedgewick
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

More Related Content

PPTX
Yzm 2116 Bölüm 6 - Sıralama ve Arama
PPTX
Yzm 2116 - Bölüm 5 (Queue, Kuyruk, Basit, Dairesel, Öncelikli)
PPTX
Yzm 2116 Bölüm 10 - Hash Table
PPTX
YZM 2116 - Bölüm 3 - Listeler
PPTX
Yzm 2116 Bölüm 8 - İkili Arama Ağacı - Binary Search Tree
PPTX
Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)
PPTX
Yzm 2116 Bölüm 11 - Graph - Çizge
PPTX
Yzm 2116 Bölüm 7 - Tree ve Binary tree - İkili Ağaç
Yzm 2116 Bölüm 6 - Sıralama ve Arama
Yzm 2116 - Bölüm 5 (Queue, Kuyruk, Basit, Dairesel, Öncelikli)
Yzm 2116 Bölüm 10 - Hash Table
YZM 2116 - Bölüm 3 - Listeler
Yzm 2116 Bölüm 8 - İkili Arama Ağacı - Binary Search Tree
Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)
Yzm 2116 Bölüm 11 - Graph - Çizge
Yzm 2116 Bölüm 7 - Tree ve Binary tree - İkili Ağaç

What's hot (20)

PPTX
Yzm 2116 Bölüm 1 - Veri Yapılarına Giriş
PPTX
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
DOCX
Siralama algoritmalari ileri algoritma analizi
PPTX
Tree traversal techniques
PDF
Sorting Algorithms
PPTX
Binary Search Tree (BST)
PPTX
Binary Heap Tree, Data Structure
PPTX
Bubble Sort
PPTX
Merge sort
PPTX
Bubble sort
PDF
Quick sort algorithn
PDF
Trees, Binary Search Tree, AVL Tree in Data Structures
PPTX
Binary Search Tree
PPTX
Red black trees
PDF
Data_structure using C-Adi.pdf
PPT
Data Structure and Algorithms Binary Search Tree
PPTX
Linear Search Data Structure
PPTX
Binary tree and operations
PPTX
Linear Search Presentation
PPTX
AVL Tree
Yzm 2116 Bölüm 1 - Veri Yapılarına Giriş
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
Siralama algoritmalari ileri algoritma analizi
Tree traversal techniques
Sorting Algorithms
Binary Search Tree (BST)
Binary Heap Tree, Data Structure
Bubble Sort
Merge sort
Bubble sort
Quick sort algorithn
Trees, Binary Search Tree, AVL Tree in Data Structures
Binary Search Tree
Red black trees
Data_structure using C-Adi.pdf
Data Structure and Algorithms Binary Search Tree
Linear Search Data Structure
Binary tree and operations
Linear Search Presentation
AVL Tree
Ad

Yzm 2116 Bölüm 9 - Heap Binary Tree

  • 1. YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği
  • 2. BÖLÜM - 9 Bu bölümde, • Hatırlatmalar • Tam İkili Ağaç • Eksiksiz İkili Ağaç • Dizi Kullanarak İkili Ağaç Gerçekleştirimi • Heap, Max Heap, Min Heap • Öncelik Kuyruğu • HeapSort konusuna değinilecektir. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 3. Hatırlatmalar… • Tam İkili Ağaç (Full Binary Tree) • Eksiksiz İkili Ağaç (Complete Binary Tree) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Neydi?
  • 4. 4Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Tam İkili Ağaç (Full Binary Tree) • Her bir düğümün (i)net olarak iki çocuk düğüme sahip olduğu ve (ii)yaprak düğümlerin aynı seviyede olduğu ikili ağaçtır. • Her düğüm, eşit şekilde sağ ve sol alt-ağaçlara sahiptir.
  • 5. 5Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Eksiksiz İkili Ağaç (Complete Binary Tree) • Son seviye dışındaki tüm seviyelerin tam (full) olduğu ikili ağaç türüdür. • Düğümleri sol taraftan (düğüme göre) doldurulur. • Yeni bir derinliğe soldan sağa doğru ekleme başlanır.
  • 6. 6Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Eksiksiz İkili Ağaç (Complete Binary Tree) (devam…)
  • 7. 7Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları SORU DİZİ KULLANARAK İKİLİ AĞAÇ GERÇEKLEŞTİREBİLİR MİYİZ?
  • 8. 8Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Dizi Kullanarak İkili Ağaç Gerçekleştirimi • Bellek kullanım tasarrufu sağlar (işaretçi yok vs.). • Düğümler arası linkler olmadığı halde, ağaç üzerindeki düğümlerde aile ilişkisi korunur (parent-child). • Gezinmeyi basitleştirir. • Veriyi Saklama Şekli i. Seviye-seviye (level-by-level) ii. Soldan-sağa (left-to-right)
  • 9. 9Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…) Soru: Aşağıdaki ikili ağacı dizide nasıl tutarız?
  • 10. 10Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…) Cevap: Kök’ü 0’dan başlatarak, sol-sağ kolları her seviyede dizi indisleri şeklinde arttırarak numaralayıp diziye atabiliriz.
  • 11. 11Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…) 0 1 2 43 5 6 7 8 9
  • 12. 12Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…) • tree.nodes[index] düğümü ifade etmek üzere • Parent-child ilişkisi: – Sol çocuk = tree.nodes[2*index+1] – Sağ çocuk = tree.nodes[2*index+2] – Parent düğüm = tree.nodes[(index-1)/2] • Yaprak düğümler: – tree.nodes[numElements/2] - tree.nodes[numElements-1] (tam sayı bölüm)
  • 13. 13Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…) Örnek: 1 indisli D düğümü için … Sol çocuk indisi ([2*index+1]): 3 Sağ çocuk indisi ([2*index+2]): 4 Parent indisi([(index-1)/2]): 00 1 2 43 5 6 7 8 9
  • 14. 14Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Dizi Kullanarak İkili Ağaç Gerçekleştirimi (devam…) • Tam veya eksiksiz ikili ağaçlar, diziler ile çok basit ve etkin şekilde gerçekleştirilebilirler. • Dizide boş alan kalmaz. • Tam tersi durumdaki ikili ağaçlarda mutlaka boş yer kullanmak gerekir.
  • 15. 15Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Heap Nedir? • Aşağıdaki özelliklere sahip ikili ağaçtır: – Özellik 1: Eksiksiz (complete) ikili ağaçtır. – Özellik 2 (Heap özelliği): Ebeveyn (parent) düğümün değeri her zaman çocukların değerinden büyük (küçük) veya eşittir. • Max Heap: Kök en büyük değere sahiptir. • Min Heap: Kök en küçük değere sahiptir.
  • 16. 16Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Max ve Min Heap Max HeapMin Heap
  • 17. 17Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Heap Gerçekleştirimi
  • 18. 19 4222127 23 45 35 Heap h = new Heap(100); h.Insert(45); h.Insert(35); h.Insert(23); h.Insert(27); h.Insert(21); h.Insert(22); h.Insert(4); h.Insert(19); Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Heap Oluşturma
  • 19. • Adım 1: Yeni düğümü seviye-seviye soldan- sağa olacak şekilde ilk uygun yere ekle. 19 4222127 23 45 35 42 Heap Insert(42)
  • 20. • Adım 2: Eklenen yeni düğümü, ebeveyn ile karşılaştırarak yukarı doğru taşı. • Adım 3: Uygun yer bulana kadar Adım 2 tekrarla. 19 4222142 23 45 35 27 Heap Insert(42)
  • 21. 19 4222135 23 45 42 27 Heap Insert(42) • Adım 2: Eklenen yeni düğümü, ebeveyn ile karşılaştırarak yukarı doğru taşı. • Adım 3: Uygun yer bulana kadar Adım 2 tekrarla.
  • 23. Max Elemanı Silme (RemoveMax) 19 4222135 23 45 42 27 • Adım 1: Son eleman kök eleman yerine taşınır. • Örnekte, 27 elemanı köke taşınır.
  • 24. 19 4222135 23 27 42 Max Elemanı Silme (RemoveMax) • Adım 1: Tamamlandı. Ancak, Heap özelliğinin tekrar kurulması gerekiyor.
  • 25. 19 4222135 23 27 42 Max Elemanı Silme (RemoveMax) • Adım 2: Eklenen yeni düğümü, büyük çocuğu ile yer değiştirecek şekilde aşağıya doğru taşı.
  • 26. 19 4222135 23 42 27 • Adım 2: Eklenen yeni düğümü, büyük çocuğu ile yer değiştirecek şekilde aşağıya doğru taşı. • Adım 3: Adım 2’yi tekrarla. Max Elemanı Silme (RemoveMax)
  • 27. 19 4222127 23 42 35 • Adım 2: Eklenen yeni düğümü, büyük çocuğu ile yer değiştirecek şekilde aşağıya doğru taşı. • Adım 3: Adım 2’yi tekrarla. Max Elemanı Silme (RemoveMax)
  • 30. Heap Ağacı Uygulamaları Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Öncelik Kuyruğu (Priority Queue) Heap Sıralama Algoritması (Heap Sort)
  • 31. Öncelik Kuyruğu Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Öncelik kuyrukları, • artan ve azalan olmak üzere ikiye ayrılırlar. • Diğer veri yapılarında olduğu gibi kuyrukta bulunan elemanlar, string veya integer gibi basit veri türünde olabileceği gibi özelliklere (attribute) sahip bir nesne de olabilir. • Öncelik kriterinin ne olacağı kuyruktan kuyruğa değişkenlik gösterir. • Kuyruğa eklenen elemanın kendisi veya herhangi bir özelliği, öncelik kriteri olabilir.
  • 32. Öncelik Kuyruğu (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Örneğin; telefon rehberi uygulamasında, • Kuyruktaki her eleman soyad, ad, adres ve telefon numarası özelliklerinden oluşmakta ve kuyruk soyada göre sıralanmaktadır. • Öncelik kuyrukları; • Dizi • Bağlı Liste • Binary Heap kullanılarak implemente edilebilir.
  • 33. Öncelik Kuyruğu (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Öncelik kuyruğunu gerçekleştirmek için • Heap gerçekleştirimindeki: o Insert() ve o RemoveMax() fonksiyonlarını aynen veya biraz değişiklikle kullanabiliriz.
  • 34. Queue İşlem Karmaşıklığı İşlem Dizi Öncelik Kuyruğu Heap Öncelik Kuyruğu Insert O(n) O(logn) Remove O(1) O(logn)
  • 35. Heap Sort Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Heap ağacı kullanarak nasıl sıralama yaparız? Adım 1: Heap ağacı oluştur ve sıralanmamış diziyi okuyarak, her bir elemanı ağaca ekle. Adım 2: 1. Ağacın en büyük elemanını oku. 2. Elemanı yeni bir diziye ata. 3. Ağacı yeniden oluştur. 4. İlk 3 adımı ağaçta eleman kalmayana kadar tekrarla.
  • 36. Heap Sort (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 37. Heap Sort (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Big O karmaşıklığı nedir? O(nlogn)
  • 39. İYİ ÇALIŞMALAR… Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 40. Yararlanılan Kaynaklar • Ders Kitabı: • Data Structures through JAVA, V.V.Muniswamy • Yardımcı Okumalar: • Data Structures and Algorithms in Java, Narashima Karumanchi • Data Structures, Algorithms and Applications in Java, Sartaj Sahni • Algorithms, Robert Sedgewick Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları