BMT207 Veri Yapıları · •Kuyruk, eleman eklemelerin sondan (rear) ve eleman...

Preview:

Citation preview

BMT207

Veri Yapıları

Günay TEMÜR

Düzce Üniversitesi

Teknoloji Fakültesi

Bilgisayar Mühendisliği

BÖLÜM - 4

İçerik;

• Kuyruk Veri Yapısı Modeli

• Basit Kuyruk (Simple Queue)

• Döngüsel Kuyruk

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ş

4

Kuyruk

5

Kuyruk

6

Kuyruk

7

Kuyruk & Stack

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.

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

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

0 1 2 3 4 5 6 7 8 9

10

front=-1

rear=0

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

0 1 2 3 4 5 6 7 8 9

10 20

front=-1

rear=1

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

0 1 2 3 4 5 6 7 8 9

10 20 30

front=-1

rear=2

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

0 1 2 3 4 5 6 7 8 9

10 20 30 40

front=-1

rear=3

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

0 1 2 3 4 5 6 7 8 9

10 20 30 40 50

front=-1

rear=4

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

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

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

• 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

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

• 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

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

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

Circular Queue

• Ya! «array» de dolarsa ?

Queue Liste Implemantasyonu

null

cnt

*front

*rear

null

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

};

enqueue()

Queue Liste Implemantasyonu

5 next

root

null

cnt

*front

*rear

enqueue()

Queue Liste Implemantasyonu

5 next

root

null

cnt

*front

*rear

10 next

enqueue()

Queue Liste Implemantasyonu

5 next

root

null

cnt

*front

*rear

10 next 15 next

enqueue()

Queue Liste Implemantasyonu

5 next

root null

cnt

*front

*rear

10 next 15 next

dequeue()

nullyrd

Queue Liste Implemantasyonu

root null

cnt

*front

*rear

10 next

15 next

dequeue()

nullyrd

Queue Liste Implemantasyonu

rootnull

cnt

*front

*rear

15 next

dequeue()

nullyrd

BİTTİ

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

Recommended