ݺߣ

ݺߣShare a Scribd company logo
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 - 5
Bu bölümde,
• Kuyruk VY ve ADT
• Basit Kuyruk (Simple Queue)
• Döngüsel Kuyruk (Circular Queue)
• Öncelik Kuyruğu (Priority Queue)
konusuna değinilecektir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Kuyruk Giriş
• Kuyruk, eleman eklemelerin sondan (rear) ve eleman
çıkarmaların bastan (front) yapıldığı, (First In First Out-
İlk Gelen İlk Çıkar – FIFO) olarak modellenen, doğrusal
bir veri saklama yapısıdır.
• Bir elemanın kuyruğa girmesi insert (literatürde put,
add veya enqueue olarak da geçer) işlemi iken listeden
silinmesi remove (delete veya dequeue) işlemidir.
• Insert’ler kuyruğun arkasından yapılırken, remove’lar
kuyruğun önünden yapılırlar.
• Boş bir kuyruktan eleman silmeye çalışmak underflow
hatası üretirken, dolu bir kuyruğa eleman eklemeye
çalışmak overflow hatası üretir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Kuyruk Giriş (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Kuyruk yapısı, yığın yapısına oldukça benzemektedir. İkisinde
de eleman ekleme işlemi en sondan yapılmaktadır.
• Aralarındaki fark eleman çıkartmanın yığın yapısında en
sondan, kuyruk yapısında ise en baştan yapılmasıdır.
Kuyruk ADT
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Insert(obj) Kuyruğun sonuna (rear) eleman ekler.
obj Remove() Kuyruğun önündeki (front) ilk elemanı yani işi biten
elemanı siler. Kuyruk boşsa hata döner.
obj Peek() Kuyruğun önündeki (front) elemanı geriye döndürür.
bool IsEmpty() Kuyruk boşsa true değilse false döner.
public interface IQueue
{
void Insert(object o);
object Remove();
object Peek();
Boolean IsEmpty();
}
Kuyruk Dizi Gerçekleştirim
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Queue dizi implementasyonu için kurallar
• Queue dizi implemetasyonunda dizimizi queue[n] olarak
tanımlarsak,
o n kuyruktaki maksimum eleman sayısıdır.
• Implementasyonda front ve rear olmak üzere 2 tane değişken
tanımlanır.
o front: kuyruğun önündeki elemanı temsil eder.
 front = -1 ise kuyruk boştur.
 Kuyruktan her eleman çıkartıldığında (REMOVE) front bir
artar.
o rear: kuyruğun sonundaki elemanı temsil eder.
 Kuyruğa her eleman eklendiğinde (INSERT) rear bir artar.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
front ve rear
• Kuyruğa bir eleman eklenince ne olur?
• Kuyruktan bir eleman çıkartılınca (işi bitince ne olur?)
Kuyruk Dizi Gerçekleştirim (devam…)
Kuyruk Dizi Gerçekleştirim (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Insert(333)
Delete()
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
Kuyruk Dizi Gerçekleştirim (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
ÖRNEK 2:
Kuyruk Dizi Gerçekleştirim (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
ÖRNEK 2:
F için yer kalmadı !!!
2 elemanlık alan kullanılamaz hale geldi !!!
Simple Queue
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Simple Queue (basit kuyruk) olarak
adlandırılan bu kuyruk tipi
o hep ileri yönde hareket etmekte ve
o verimsiz alan kullanımına neden olmaktadır.
Simple Queue Kaynak Kod
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
//Sınıf Tanımı
public class SimpleArrayTypedQueue: IQueue
//Üye Değişkenleri
private object[] Queue;
private int front = -1;
private int rear = -1;
private int size = 0;
private int count = 0;
//Constructor
public SimpleArrayTypedQueue(int size)
{
this.size = size;
Queue = new object[size];
}
Simple Queue Kaynak Kod (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
public void Insert(object o)
{
if ((count == size) || (rear == size -1))
throw new Exception("Queue dolu.");
if (front == -1)
front = 0;
Queue[++rear] = o;
count++;
}
Simple Queue Kaynak Kod (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
public object Remove()
{
if (IsEmpty())
throw new Exception("Queue boş.");
object temp = Queue[front];
Queue[front] = null;
front++;
count--;
return temp;
}
public bool IsEmpty()
{
return (count == 0);
}
Simple Queue İyileştirmeler
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Basit kuyruk gerçekleştiriminde çeşitli iyileştirmeler
yapılabilir:
 İyileştirme 1: Silme sonucunda kuyrukta hiç eleman
kalmazsa, kuyruk sıfırdan oluşturulmuş gibi ilk durumuna
getirilebilir.
 İyileştirme 2: Kaydırma (shift) işlemi yapılarak öndeki
boş yerler kullanıma sokulmak üzere arkaya taşınabilir,
fakat kaydırmalar aşırı zaman alır ve maliyetlidir.
 İyileştirme 3: Diğer iyileştirme kuyruğun boşta kalan
öndeki alanlarını kullanmaya yönelik bir geliştirme
yapılabilir (Circular - Döngüsel Kuyruk).
Circular Queue
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Basit kuyrukta karşılaşılan ve kuyruğun başında
kalan kullanılamayan alan problemini çözmek
için döngüsel kuyruk veri yapısı geliştirilmiştir.
• Döngüsel kuyrukta,
o Kuyruğun başı ile sonu birleştirilmiştir.
• Önde boşalan yerler,
arkadaymış gibi otomatik
olarak kullanıma sokulur.
Döngüsel Kuyruk Dizi Gerçekleştirim
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
ÖRNEK 3:
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
ÖRNEK 3:
Döngüsel Kuyruk Dizi Gerçekleştirim (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
ÖRNEK 3:
Döngüsel Kuyruk Dizi Gerçekleştirim (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
ÖRNEK 3:
Adım 6 sonrasında oluşan son durumun döngüsel kuyruk ile
gösterimi aşağıdaki gibidir:
Döngüsel Kuyruk Dizi Gerçekleştirim (devam…)
Döngüsel Kuyruk Kaynak Kod (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
public void Insert(object o)
{
if ((count == size) || (rear == size -1))
throw new Exception("Queue dolu.");
if (front == -1)
front = 0;
//Circular Code Değişikliği
if (rear == size - 1)
{
rear = 0;
Queue[rear] = o;
}
else
Queue[++rear] = o;
count++;
}
Döngüsel Kuyruk Kaynak Kod (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
public object Remove()
{
if (IsEmpty())
throw new Exception("Queue boş.");
object temp = Queue[front];
Queue[front] = null;
//Circular Code Değişikliği
if (front == size - 1)
front = 0;
else
front++;
count--;
return temp;
}
public bool IsEmpty()
{
return (count == 0);
}
Priority Queue
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Standart kuyruk veri yapısı önceliklendirme
eksikliği nedeniyle, birçok durumda
(problemde) kullanılmak için uygun
olmayabilir.
• Gerçek hayatta uygulanan kuyruk yapılarında
öncelik durumu dikkate alınır, önceliği yüksek
olanlar önce işlem görürler.
Priority Queue (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Örneğin; yazılım bakım sürecinde yazılım
departmanına iletilen hataları düşünelim. İletilen
her hata bir havuza atılır ve sırasıyla uygun
yazılımcıya iletilir. Bazı hatalar diğerlerinden
daha önceliklidir.
• Mesela sistemdeki tüm modülleri etkileyen hatalar
çok daha kritik olup diğerlerinden daha önce
tamamlanmalıdır.
• Aynı şekilde işletim sistemlerinde bazı prosesler
diğerlerinden daha öncelikli olarak çalışmak
durumundadır.
Priority Queue (devam…)
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.
Priority Queue (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.
PQ Dizi Gerçekleştirim
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Artan tipteki öncelik kuyruğunda en küçük
değere sahip eleman en öncelikli olarak
kuyruktan silinir (yani ilk olarak işlem görür).
ÖRNEK 4:
PQ Dizi Gerçekleştirim (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
ÖRNEK 4:
PQ Dizi Gerçekleştirim (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
ÖRNEK 4:
PQ Dizi Gerçekleştirim (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
ÖRNEK 4:
Priority Queue Kaynak Kod
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
public class PriorityQueue: IQueue
private object[] Queue;
private int front = -1;
//Not1: rear değeri hep 0 olduğu için değişmez.
//Not2: size ve count değişkenlerinden birisi
//istenirse kullanılmayabilir
private int size = 0;
private int count = 0;
public PriorityQueue(int size)
{
this.size = size;
Queue = new object[size];
}
Priority Queue Kaynak Kod (devam…)
public void Insert(object o)
{
if (count == size)
throw new Exception("Queue is full");
if (IsEmpty())
{
front++;
Queue[front] = o;
}
else
{
int i;
//Not3:
//Son elemandan başlayarak geriye doğru kuyruk kontrol ediliyor
//Eklenecek elemanın pozisyonu belirleniyor
//Var olan elemanlar kaydırılıyor
for (i = count - 1; i >= 0; i--)
{
if ((int)o > (int)Queue[i])
Queue[i + 1] = Queue[i];
else
break;
}
Queue[i + 1] = o;
front++;
}
count++;
}
Priority Queue Kaynak Kod (devam…)
public object Remove()
{
if (this.IsEmpty())
{
throw new Exception("Queue is empty...");
}
object temp = Queue[front];
Queue[front] = null;
front--;
count--;
return temp;
}
Queue İşlem Karmaşıklığı
İşlem Basit
Kuyruk
Döngüsel
Kuyruk
Öncelik
Kuyruğu
Insert O(1) O(1) O(n)
Remove O(1) O(1) O(1)
Peek O(1) O(1) O(1)
IsEmpty O(1) O(1) O(1)
• Dizi ile implemente edilmiş kuyruk türlerinin
işlem karmaşıklığı aşağıdaki tabloda verilmiştir.
İ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ı
Ad

Recommended

Yzm 2116 Bölüm 6 - Sıralama ve Arama
Yzm 2116 Bölüm 6 - Sıralama ve Arama
Deniz KILINÇ
YZM 2116 - Bölüm 3 - Listeler
YZM 2116 - Bölüm 3 - Listeler
Deniz KILINÇ
Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)
Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)
Deniz KILINÇ
Yzm 2116 Bölüm 9 - Heap Binary Tree
Yzm 2116 Bölüm 9 - Heap Binary Tree
Deniz KILINÇ
Yzm 2116 Bölüm 8 - İkili Arama Ağacı - Binary Search Tree
Yzm 2116 Bölüm 8 - İkili Arama Ağacı - Binary Search Tree
Deniz KILINÇ
Yzm 2116 Bölüm 7 - Tree ve Binary tree - İkili Ağaç
Yzm 2116 Bölüm 7 - Tree ve Binary tree - İkili Ağaç
Deniz KILINÇ
Yzm 2116 Bölüm 11 - Graph - Çizge
Yzm 2116 Bölüm 11 - Graph - Çizge
Deniz KILINÇ
Yzm 2116 Bölüm 10 - Hash Table
Yzm 2116 Bölüm 10 - Hash Table
Deniz KILINÇ
Yzm 2116 Bölüm 1 - Veri Yapılarına Giriş
Yzm 2116 Bölüm 1 - Veri Yapılarına Giriş
Deniz KILINÇ
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
Deniz KILINÇ
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Ömer Özselçuk
Queues
Queues
Lovely Professional University
Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)
Mikhail Kurnosov
GAC DS Priority Queue Presentation 2022.ppt
GAC DS Priority Queue Presentation 2022.ppt
CUO VEERANAN VEERANAN
Stack and Queue by M.Gomathi Lecturer
Stack and Queue by M.Gomathi Lecturer
gomathi chlm
Data Structure and Algorithms Binary Search Tree
Data Structure and Algorithms Binary Search Tree
ManishPrajapati78
Shell sort
Shell sort
Rajendran
single linked list
single linked list
Sathasivam Rangasamy
Stack, Queue, Linked List.pptx
Stack, Queue, Linked List.pptx
Bharati Vidyapeeth COE, Navi Mumbai
1.5 binary search tree
1.5 binary search tree
Krish_ver2
Singly linked list
Singly linked list
Amar Jukuntla
Advanced data structures vol. 1
Advanced data structures vol. 1
Christalin Nelson
DSA Lab Manual C Scheme.pdf
DSA Lab Manual C Scheme.pdf
Bharati Vidyapeeth COE, Navi Mumbai
Singly & Circular Linked list
Singly & Circular Linked list
Khulna University of Engineering & Tecnology
Data structures chapter 1
Data structures chapter 1
priyavanimurugarajan
Shell sort in Data Structure Using C
Shell sort in Data Structure Using C
Ashish Gaurkhede
Circular linked list
Circular linked list
chauhankapil
Trees
Trees
Selvaraj Seerangan

More Related Content

What's hot (20)

Yzm 2116 Bölüm 1 - Veri Yapılarına Giriş
Yzm 2116 Bölüm 1 - Veri Yapılarına Giriş
Deniz KILINÇ
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
Deniz KILINÇ
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Ömer Özselçuk
Queues
Queues
Lovely Professional University
Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)
Mikhail Kurnosov
GAC DS Priority Queue Presentation 2022.ppt
GAC DS Priority Queue Presentation 2022.ppt
CUO VEERANAN VEERANAN
Stack and Queue by M.Gomathi Lecturer
Stack and Queue by M.Gomathi Lecturer
gomathi chlm
Data Structure and Algorithms Binary Search Tree
Data Structure and Algorithms Binary Search Tree
ManishPrajapati78
Shell sort
Shell sort
Rajendran
single linked list
single linked list
Sathasivam Rangasamy
Stack, Queue, Linked List.pptx
Stack, Queue, Linked List.pptx
Bharati Vidyapeeth COE, Navi Mumbai
1.5 binary search tree
1.5 binary search tree
Krish_ver2
Singly linked list
Singly linked list
Amar Jukuntla
Advanced data structures vol. 1
Advanced data structures vol. 1
Christalin Nelson
DSA Lab Manual C Scheme.pdf
DSA Lab Manual C Scheme.pdf
Bharati Vidyapeeth COE, Navi Mumbai
Singly & Circular Linked list
Singly & Circular Linked list
Khulna University of Engineering & Tecnology
Data structures chapter 1
Data structures chapter 1
priyavanimurugarajan
Shell sort in Data Structure Using C
Shell sort in Data Structure Using C
Ashish Gaurkhede
Circular linked list
Circular linked list
chauhankapil
Trees
Trees
Selvaraj Seerangan
Yzm 2116 Bölüm 1 - Veri Yapılarına Giriş
Yzm 2116 Bölüm 1 - Veri Yapılarına Giriş
Deniz KILINÇ
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
Deniz KILINÇ
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Ömer Özselçuk
Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)
Mikhail Kurnosov
GAC DS Priority Queue Presentation 2022.ppt
GAC DS Priority Queue Presentation 2022.ppt
CUO VEERANAN VEERANAN
Stack and Queue by M.Gomathi Lecturer
Stack and Queue by M.Gomathi Lecturer
gomathi chlm
Data Structure and Algorithms Binary Search Tree
Data Structure and Algorithms Binary Search Tree
ManishPrajapati78
1.5 binary search tree
1.5 binary search tree
Krish_ver2
Shell sort in Data Structure Using C
Shell sort in Data Structure Using C
Ashish Gaurkhede

Yzm 2116 - Bölüm 5 (Queue, Kuyruk, Basit, Dairesel, Öncelikli)

  • 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 - 5 Bu bölümde, • Kuyruk VY ve ADT • Basit Kuyruk (Simple Queue) • Döngüsel Kuyruk (Circular Queue) • Öncelik Kuyruğu (Priority Queue) konusuna değinilecektir. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 3. Kuyruk Giriş • Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmaların bastan (front) yapıldığı, (First In First Out- İlk Gelen İlk Çıkar – FIFO) olarak modellenen, doğrusal bir veri saklama yapısıdır. • Bir elemanın kuyruğa girmesi insert (literatürde put, add veya enqueue olarak da geçer) işlemi iken listeden silinmesi remove (delete veya dequeue) işlemidir. • Insert’ler kuyruğun arkasından yapılırken, remove’lar kuyruğun önünden yapılırlar. • Boş bir kuyruktan eleman silmeye çalışmak underflow hatası üretirken, dolu bir kuyruğa eleman eklemeye çalışmak overflow hatası üretir. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 4. Kuyruk Giriş (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Kuyruk yapısı, yığın yapısına oldukça benzemektedir. İkisinde de eleman ekleme işlemi en sondan yapılmaktadır. • Aralarındaki fark eleman çıkartmanın yığın yapısında en sondan, kuyruk yapısında ise en baştan yapılmasıdır.
  • 5. Kuyruk ADT Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Insert(obj) Kuyruğun sonuna (rear) eleman ekler. obj Remove() Kuyruğun önündeki (front) ilk elemanı yani işi biten elemanı siler. Kuyruk boşsa hata döner. obj Peek() Kuyruğun önündeki (front) elemanı geriye döndürür. bool IsEmpty() Kuyruk boşsa true değilse false döner. public interface IQueue { void Insert(object o); object Remove(); object Peek(); Boolean IsEmpty(); }
  • 6. Kuyruk Dizi Gerçekleştirim Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Queue dizi implementasyonu için kurallar • Queue dizi implemetasyonunda dizimizi queue[n] olarak tanımlarsak, o n kuyruktaki maksimum eleman sayısıdır. • Implementasyonda front ve rear olmak üzere 2 tane değişken tanımlanır. o front: kuyruğun önündeki elemanı temsil eder.  front = -1 ise kuyruk boştur.  Kuyruktan her eleman çıkartıldığında (REMOVE) front bir artar. o rear: kuyruğun sonundaki elemanı temsil eder.  Kuyruğa her eleman eklendiğinde (INSERT) rear bir artar.
  • 7. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları front ve rear • Kuyruğa bir eleman eklenince ne olur? • Kuyruktan bir eleman çıkartılınca (işi bitince ne olur?) Kuyruk Dizi Gerçekleştirim (devam…)
  • 8. Kuyruk Dizi Gerçekleştirim (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Insert(333) Delete() ----------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------
  • 9. Kuyruk Dizi Gerçekleştirim (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları ÖRNEK 2:
  • 10. Kuyruk Dizi Gerçekleştirim (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları ÖRNEK 2: F için yer kalmadı !!! 2 elemanlık alan kullanılamaz hale geldi !!!
  • 11. Simple Queue Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Simple Queue (basit kuyruk) olarak adlandırılan bu kuyruk tipi o hep ileri yönde hareket etmekte ve o verimsiz alan kullanımına neden olmaktadır.
  • 12. Simple Queue Kaynak Kod Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları //Sınıf Tanımı public class SimpleArrayTypedQueue: IQueue //Üye Değişkenleri private object[] Queue; private int front = -1; private int rear = -1; private int size = 0; private int count = 0; //Constructor public SimpleArrayTypedQueue(int size) { this.size = size; Queue = new object[size]; }
  • 13. Simple Queue Kaynak Kod (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları public void Insert(object o) { if ((count == size) || (rear == size -1)) throw new Exception("Queue dolu."); if (front == -1) front = 0; Queue[++rear] = o; count++; }
  • 14. Simple Queue Kaynak Kod (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları public object Remove() { if (IsEmpty()) throw new Exception("Queue boş."); object temp = Queue[front]; Queue[front] = null; front++; count--; return temp; } public bool IsEmpty() { return (count == 0); }
  • 15. Simple Queue İyileştirmeler Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Basit kuyruk gerçekleştiriminde çeşitli iyileştirmeler yapılabilir:  İyileştirme 1: Silme sonucunda kuyrukta hiç eleman kalmazsa, kuyruk sıfırdan oluşturulmuş gibi ilk durumuna getirilebilir.  İyileştirme 2: Kaydırma (shift) işlemi yapılarak öndeki boş yerler kullanıma sokulmak üzere arkaya taşınabilir, fakat kaydırmalar aşırı zaman alır ve maliyetlidir.  İyileştirme 3: Diğer iyileştirme kuyruğun boşta kalan öndeki alanlarını kullanmaya yönelik bir geliştirme yapılabilir (Circular - Döngüsel Kuyruk).
  • 16. Circular Queue Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Basit kuyrukta karşılaşılan ve kuyruğun başında kalan kullanılamayan alan problemini çözmek için döngüsel kuyruk veri yapısı geliştirilmiştir. • Döngüsel kuyrukta, o Kuyruğun başı ile sonu birleştirilmiştir. • Önde boşalan yerler, arkadaymış gibi otomatik olarak kullanıma sokulur.
  • 17. Döngüsel Kuyruk Dizi Gerçekleştirim Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları ÖRNEK 3:
  • 18. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları ÖRNEK 3: Döngüsel Kuyruk Dizi Gerçekleştirim (devam…)
  • 19. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları ÖRNEK 3: Döngüsel Kuyruk Dizi Gerçekleştirim (devam…)
  • 20. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları ÖRNEK 3: Adım 6 sonrasında oluşan son durumun döngüsel kuyruk ile gösterimi aşağıdaki gibidir: Döngüsel Kuyruk Dizi Gerçekleştirim (devam…)
  • 21. Döngüsel Kuyruk Kaynak Kod (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları public void Insert(object o) { if ((count == size) || (rear == size -1)) throw new Exception("Queue dolu."); if (front == -1) front = 0; //Circular Code Değişikliği if (rear == size - 1) { rear = 0; Queue[rear] = o; } else Queue[++rear] = o; count++; }
  • 22. Döngüsel Kuyruk Kaynak Kod (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları public object Remove() { if (IsEmpty()) throw new Exception("Queue boş."); object temp = Queue[front]; Queue[front] = null; //Circular Code Değişikliği if (front == size - 1) front = 0; else front++; count--; return temp; } public bool IsEmpty() { return (count == 0); }
  • 23. Priority Queue Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Standart kuyruk veri yapısı önceliklendirme eksikliği nedeniyle, birçok durumda (problemde) kullanılmak için uygun olmayabilir. • Gerçek hayatta uygulanan kuyruk yapılarında öncelik durumu dikkate alınır, önceliği yüksek olanlar önce işlem görürler.
  • 24. Priority Queue (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Örneğin; yazılım bakım sürecinde yazılım departmanına iletilen hataları düşünelim. İletilen her hata bir havuza atılır ve sırasıyla uygun yazılımcıya iletilir. Bazı hatalar diğerlerinden daha önceliklidir. • Mesela sistemdeki tüm modülleri etkileyen hatalar çok daha kritik olup diğerlerinden daha önce tamamlanmalıdır. • Aynı şekilde işletim sistemlerinde bazı prosesler diğerlerinden daha öncelikli olarak çalışmak durumundadır.
  • 25. Priority Queue (devam…) 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.
  • 26. Priority Queue (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.
  • 27. PQ Dizi Gerçekleştirim Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Artan tipteki öncelik kuyruğunda en küçük değere sahip eleman en öncelikli olarak kuyruktan silinir (yani ilk olarak işlem görür). ÖRNEK 4:
  • 28. PQ Dizi Gerçekleştirim (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları ÖRNEK 4:
  • 29. PQ Dizi Gerçekleştirim (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları ÖRNEK 4:
  • 30. PQ Dizi Gerçekleştirim (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları ÖRNEK 4:
  • 31. Priority Queue Kaynak Kod Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları public class PriorityQueue: IQueue private object[] Queue; private int front = -1; //Not1: rear değeri hep 0 olduğu için değişmez. //Not2: size ve count değişkenlerinden birisi //istenirse kullanılmayabilir private int size = 0; private int count = 0; public PriorityQueue(int size) { this.size = size; Queue = new object[size]; }
  • 32. Priority Queue Kaynak Kod (devam…) public void Insert(object o) { if (count == size) throw new Exception("Queue is full"); if (IsEmpty()) { front++; Queue[front] = o; } else { int i; //Not3: //Son elemandan başlayarak geriye doğru kuyruk kontrol ediliyor //Eklenecek elemanın pozisyonu belirleniyor //Var olan elemanlar kaydırılıyor for (i = count - 1; i >= 0; i--) { if ((int)o > (int)Queue[i]) Queue[i + 1] = Queue[i]; else break; } Queue[i + 1] = o; front++; } count++; }
  • 33. Priority Queue Kaynak Kod (devam…) public object Remove() { if (this.IsEmpty()) { throw new Exception("Queue is empty..."); } object temp = Queue[front]; Queue[front] = null; front--; count--; return temp; }
  • 34. Queue İşlem Karmaşıklığı İşlem Basit Kuyruk Döngüsel Kuyruk Öncelik Kuyruğu Insert O(1) O(1) O(n) Remove O(1) O(1) O(1) Peek O(1) O(1) O(1) IsEmpty O(1) O(1) O(1) • Dizi ile implemente edilmiş kuyruk türlerinin işlem karmaşıklığı aşağıdaki tabloda verilmiştir.
  • 35. İYİ ÇALIŞMALAR… Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 36. 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ı