32
BMT207 Veri Yapıları Günay TEMÜR Düzce Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği

BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

BMT207

Veri Yapıları

Günay TEMÜR

Düzce Üniversitesi

Teknoloji Fakültesi

Bilgisayar Mühendisliği

Page 2: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

BÖLÜM - 4

İçerik;

• Kuyruk Veri Yapısı Modeli

• Basit Kuyruk (Simple Queue)

• Döngüsel Kuyruk

Page 3: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

3

•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 yapısı modelidir.

•Bir elemanın kuyruğa girmesi insert (enqueue) işlemi iken

listeden silinmesi remove (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.

Kuyruk Giriş

Page 4: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

4

Kuyruk

Page 5: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

5

Kuyruk

Page 6: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

6

Kuyruk

Page 7: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

7

Kuyruk & Stack

Page 8: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Çalışma Mantığı

Queue dizi implementasyonu için kurallar

• 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.

Page 9: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Çalışma Mantığı (devam…)

0 1 2 3 4 5 6 7 8 9front=-1

rear=-1

front ve rear

• Kuyruğa bir eleman eklenince ne olur?

• Kuyruktan bir eleman çıkartılınca (işi bitince ne olur?)

Page 10: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Çalışma Mantığı (devam…)

0 1 2 3 4 5 6 7 8 9

10

front=-1

rear=0

Page 11: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Çalışma Mantığı (devam…)

0 1 2 3 4 5 6 7 8 9

10 20

front=-1

rear=1

Page 12: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Çalışma Mantığı (devam…)

0 1 2 3 4 5 6 7 8 9

10 20 30

front=-1

rear=2

Page 13: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Çalışma Mantığı (devam…)

0 1 2 3 4 5 6 7 8 9

10 20 30 40

front=-1

rear=3

Page 14: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Çalışma Mantığı (devam…)

0 1 2 3 4 5 6 7 8 9

10 20 30 40 50

front=-1

rear=4

Page 15: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Çalışma Mantığı (devam…)

0 1 2 3 4 5 6 7 8 9

10 20 30 40 50

front=0

rear=4

X

Page 16: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Çalışma Mantığı (devam…)

0 1 2 3 4 5 6 7 8 9

10 20 30 40 50

front=1

rear=4

X X

Page 17: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Çalışma Mantığı (devam…)

0 1 2 3 4 5 6 7 8 9

10 20 30 40 50

front=2

rear=4

X X X

Page 18: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

• Simple Queue (basit kuyruk) olarak

adlandırılan bu kuyruk tipio hep ileri yönde hareket etmekte ve

o verimsiz alan kullanımına neden

olmaktadır.

Simple Queue

Page 19: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

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).

Simple Queue İyileştirmeleri

Page 20: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

• 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ı modeli geliştirilmiştir.

Circular Queue

0 1 2 3 4 5 6 7 8 9

10 20 30 40 50 60 70 80 90 100

front=2

rear=9

X X X

Aslında «array» de boş alanlar var

Page 21: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Circular Queue

• Bu sebeple; Önde boş olan indisler,

arkadaymış gibi otomatik olarak kullanıma

sokulur.

0 1 2 3 4 5 6 7

10 20 30 40 50 60 70 80

front=3

rear=7

X X X

7 6

5

4

32

1

0

X

Page 22: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Circular Queue

• Öndeki boş olan indislere, ekleme işlemi

«array» dolana kadar devam edilir.

0 1 2 3 4 5 6 7

90 20 30 40 50 60 70 80

front=3

rear=0

X X X

Page 23: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Circular Queue

• Ya! «array» de dolarsa ?

Page 24: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Liste Implemantasyonu

null

cnt

*front

*rear

null

struct {int cnt;node *front;node *rear;

};

enqueue()

Page 25: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Liste Implemantasyonu

5 next

root

null

cnt

*front

*rear

enqueue()

Page 26: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Liste Implemantasyonu

5 next

root

null

cnt

*front

*rear

10 next

enqueue()

Page 27: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Liste Implemantasyonu

5 next

root

null

cnt

*front

*rear

10 next 15 next

enqueue()

Page 28: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Liste Implemantasyonu

5 next

root null

cnt

*front

*rear

10 next 15 next

dequeue()

nullyrd

Page 29: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Liste Implemantasyonu

root null

cnt

*front

*rear

10 next

15 next

dequeue()

nullyrd

Page 30: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Queue Liste Implemantasyonu

rootnull

cnt

*front

*rear

15 next

dequeue()

nullyrd

Page 31: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

BİTTİ

Page 32: BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman çıkarmalarınbastan (front) yapıldığı, •(First In First Out-İlk Gelen İlk Çıkar – FIFO)

Yararlanılan Kaynaklar

• Ders Kitabı:

• Veri Yapıları Rifat ÇÖLKESEN

• Data Structures Using C, Reema Thareja

• Yardımcı Okumalar:

• Celal Bayar Üniversitesi, Yrd. Doç. Dr. Deniz KILINÇ

hocanın sunumları.