79
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

Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Embed Size (px)

Citation preview

Page 1: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

YZM 2116Veri Yapıları

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

Hasan Ferdi Turgutlu Teknoloji FakültesiYazılım Mühendisliği

Page 2: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

BÖLÜM - 4

Bu bölümde,• Stack (Yığın, Yığıt) Veri Yapısı• Stack Çalışma Şekli• Stack Dizi Implementasyon• Stack Uygulamalarıkonularına değinilecektir.

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 3: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

3Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Stack, doğrusal artan bir veri yapısı olup; • Insert (push) ve Delete (pop) işlemleri,

o Listenin sadece “top” adı verilen bir ucunda yani stack’in en üstünden gerçekleştirilir.

• Bu nedenle stack o Son Giren İlk Çıkar (Last In First Out -

LIFO) mantığı ile işleyen bir veri yapısıdır.

Stack Tanımı

Page 4: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

4Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Stack Tanımı (devam…)

Page 5: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

5Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Stack ADT Interface

public interface IStack{ void Push(object item); object Pop(); object Peek(); bool IsEmpty(); int Top { get; set; }}

• Push: Elemanı yığıtın üstüne ekle• Pop: Yığıtın üstündeki elemanı

çıkart• Peek: En üstteki elemanı oku • IsEmpty: Yığıt boş mu?

Page 6: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack Çalışma Şekli

Stack

stack stk;

• Stack sınıfından tanımlanmış stk isimli bir yığıt olsun. • İlk aşamada yığıt boş.

Page 7: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

stk.push(10)

• Push ile yığıtın üstüne yeni bir eleman ekliyoruz.

10

10

Stack Çalışma Şekli (devam…)

Stack

Page 8: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

stk.push(20)

• Push ile yığıta yeni bir eleman ekliyoruz.

10

20

20

Stack Çalışma Şekli (devam…)

Stack

Page 9: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

stk.push(30)

10

30

20

30

Stack Çalışma Şekli (devam…)

• Push ile yığıta yeni bir eleman ekliyoruz.

Stack

Page 10: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

stk.push(40)

10

40

20

30

40

Stack Çalışma Şekli (devam…)

• Push ile yığıta yeni bir eleman ekliyoruz.

Stack

Page 11: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

x=stk.pop()

• Pop ile yığıtın üstünden bir eleman çıkartıyoruz.

10

20

30

x=40

40

Stack Çalışma Şekli (devam…)

Stack

Page 12: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

x=stk.pop()

10

20

x=30

30

Stack Çalışma Şekli (devam…)

• Pop ile yığıtın üstünden bir eleman çıkartıyoruz.

Stack

Page 13: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

x=stk.pop()

10

x=20

20

Stack Çalışma Şekli (devam…)

• Pop ile yığıtın üstünden bir eleman çıkartıyoruz.

Stack

Page 14: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

x=stk.pop()

x=10

10

Stack Çalışma Şekli (devam…)

• Pop ile yığıtın üstünden bir eleman çıkartıyoruz.

Stack

Page 15: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

15Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Stack iki şekilde implemente edilebilir:1. Dizi kullanarak2. Bağlı liste kullanarak

Stack Implementasyonu

Page 16: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack Dizi ile Gerçekleştirim

• Dizi ile gerçekleştirmede stack elemanları dizi üzerinde tutulur.

• Bir tam sayı değişken yığıtın tepesindeki elemanın adresini takip etmek için kullanılır.

Eleman 3Eleman 2

Eleman 0Eleman 1

Tepeyi takip eden indis

Stack

Dizi[0]Dizi[1]

Dizi[2]

Dizi[3]Dizi[4]

Dizi[5]Dizi[6]

Dizi[7]

Page 17: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack

Top=-1Dizi[0]Dizi[1]

Dizi[2]

Dizi[3]Dizi[4]

Dizi[5]Dizi[6]

Dizi[7]

Stack Dizi ile Gerçekleştirim (devam…)

Page 18: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Eleman0

Stack

Top=0

Stack.push(Eleman0)

Dizi[0]Dizi[1]

Dizi[2]

Dizi[3]Dizi[4]

Dizi[5]Dizi[6]

Dizi[7]

Stack Dizi ile Gerçekleştirim (devam…)

Page 19: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Eleman3Eleman2

Eleman0Eleman1

Stack

Top=3

Stack.push(Eleman0)Stack.push(Eleman1)Stack.push(Eleman2)Stack.push(Eleman3)

Dizi[0]Dizi[1]

Dizi[2]

Dizi[3]Dizi[4]

Dizi[5]Dizi[6]

Dizi[7]

Stack Dizi ile Gerçekleştirim (devam…)

Page 20: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack.push(Eleman0)Stack.push(Eleman1)Stack.push(Eleman2)Stack.push(Eleman3)Stack.push(Eleman4)Eleman4

Eleman3Eleman2

Eleman0Eleman1

Stack

Top=4

Dizi[0]Dizi[1]

Dizi[2]

Dizi[3]Dizi[4]

Dizi[5]Dizi[6]

Dizi[7]

Stack Dizi ile Gerçekleştirim (devam…)

Page 21: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack.push(Eleman0)Stack.push(Eleman1)Stack.push(Eleman2)Stack.push(Eleman3)Stack.push(Eleman4)Stack.push(Eleman5)

Eleman5Eleman4Eleman3Eleman2

Eleman0Eleman1

Stack

Top=5

Dizi[0]Dizi[1]

Dizi[2]

Dizi[3]Dizi[4]

Dizi[5]Dizi[6]

Dizi[7]

Stack Dizi ile Gerçekleştirim (devam…)

Page 22: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack.push(Eleman0)Stack.push(Eleman1)Stack.push(Eleman2)Stack.push(Eleman3)Stack.push(Eleman4)Stack.push(Eleman5)Stack.push(Eleman6)Stack.push(Eleman7)

Eleman7Eleman6Eleman5Eleman4Eleman3Eleman2

Eleman0Eleman1

Stack

Top=7

Dizi[0]Dizi[1]

Dizi[2]

Dizi[3]Dizi[4]

Dizi[5]Dizi[6]

Dizi[7]

Stack Dizi ile Gerçekleştirim (devam…)

Page 23: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack.push(Eleman0)Stack.push(Eleman1)Stack.push(Eleman2)Stack.push(Eleman3)Stack.push(Eleman4)Stack.push(Eleman5)Stack.push(Eleman6)Stack.push(Eleman8)

Eleman7Eleman6Eleman5Eleman4Eleman3Eleman2

Eleman0Eleman1

StackTop=8

Dizi[0]Dizi[1]

Dizi[2]

Dizi[3]Dizi[4]

Dizi[5]Dizi[6]

Dizi[7]

HATATop<kapasite

olmalı

Stack Dizi ile Gerçekleştirim (devam…)

Tamamen dolu bir stack’a push işlemi overflow

hatası

Page 24: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack.push(Eleman0)Stack. push(Eleman1)Stack. push(Eleman2)Stack. push(Eleman3)Stack.push(Eleman4)Stack.push(Eleman5)Stack.push(Eleman6)Stack.push(Eleman7)Stack.pop()

Eleman6Eleman5Eleman4Eleman3Eleman2

Eleman0Eleman1

Stack

Top=6

Dizi[0]Dizi[1]Dizi[2]

Dizi[3]Dizi[4]Dizi[5]Dizi[6]Dizi[7]

Stack Dizi ile Gerçekleştirim (devam…)

Page 25: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack.push(Eleman0)Stack. push(Eleman1)Stack. push(Eleman2)Stack. push(Eleman3)Stack.push(Eleman4)Stack.push(Eleman5)Stack.push(Eleman6)Stack.push(Eleman7)Stack.pop()Stack.pop()

Eleman5Eleman4Eleman3Eleman2

Eleman0Eleman1

Stack

Top=5

Dizi[0]Dizi[1]Dizi[2]

Dizi[3]Dizi[4]Dizi[5]Dizi[6]Dizi[7]

Stack Dizi ile Gerçekleştirim (devam…)

Page 26: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack.push(Eleman0)Stack. push(Eleman1)Stack. push(Eleman2)Stack. push(Eleman3)Stack.push(Eleman4)Stack.push(Eleman5)Stack.push(Eleman6)Stack.push(Eleman7)Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()

Eleman0

Stack

Top=0Dizi[0]Dizi[1]Dizi[2]

Dizi[3]Dizi[4]Dizi[5]Dizi[6]Dizi[7]

Stack Dizi ile Gerçekleştirim (devam…)

Page 27: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack

Top=-1

Stack.push(Eleman0)Stack. push(Eleman1)Stack. push(Eleman2)Stack. push(Eleman3)Stack.push(Eleman4)Stack.push(Eleman5)Stack.push(Eleman6)Stack.push(Eleman7)Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()

Dizi[0]Dizi[1]Dizi[2]

Dizi[3]Dizi[4]Dizi[5]Dizi[6]Dizi[7]

-1 indis değeri yığıtın boş

olduğunu gösterir

Stack Dizi ile Gerçekleştirim (devam…)

Page 28: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack

Top=-2

Stack.push(Eleman0)Stack. push(Eleman1)Stack. push(Eleman2)Stack. push(Eleman3)Stack.push(Eleman4)Stack.push(Eleman5)Stack.push(Eleman6)Stack.push(Eleman7)Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()Stack.pop()

Dizi[0]Dizi[1]Dizi[2]

Dizi[3]Dizi[4]Dizi[5]Dizi[6]Dizi[7]

HATA-1’den küçük

olamaz

Stack Dizi ile Gerçekleştirim (devam…)

Boş bir stack’ta pop işlemi underflow

hatası

Page 29: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

29Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

1. Word, Excel, Photoshop gibi yazılımlarda yapılan işlemlerin sırayla kayıt edildiği ve geri alınabilecek şekilde tutulduğu undo fonksiyonu bir stack uygulamasıdır.

2. Bir web tarayıcısındada ileri-geri adres gezmek için stack yapısı kullanır.

3. C# veya Java gibi programlama dillerinde açılan parantezin doğru kapatılması kontrolünde (“Matching Bracket” – “Parantez Eşleştirme” kontrolü) kullanılır.

4. Polish Notasyon: Infix olarak bilinen A*(B+C/D)-E cebirsel gösteriminin yerine hesap makinelerinde kullanılan postfix ABCD/+*E notasyonuna çevirme işleminde stack kullanır.

5. HTML-XML’de tag’lerin eşleştirilmesi bir stack uygulamasıdır.

Stack Uygulamaları

Page 30: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

30Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

5. Stack’ların bir diğer uygulama alanı labirent türü problemlerin çözümünde backtracking (bir yola gir yol tıkanırsa en son yol ayrımına geri gel, başka yola devam et!) yöntemiyle kullanılır. o Yol bilgisi bir stack yapısına push edilir yol yanlışsa son

gidilen yanlış nokta pop edilir önceki noktayla devam edilir.6. Java derleyicisi program kodunun tamamını postfix’e

çevirirken stack kullanır.7. Java Virtual Machine (JVM) byte code’ları execute

ederken altyapısında yine stack kullanır.8. Recursion ve function call işlemlerinin Bellekte

gerçekleştirilmesinde stack kullanılır.

Stack Uygulamaları (devam…)

Page 31: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

31Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Amacımız string bir ifadeyi tersten yazdırmaktır.

Uyg1-String Reverse

• Çözüm?:- String ifadedeki her bir karakter soldan-sağa

okunarak, stack’e Push metodu ile eklenir.- Stack’deki her bir karakter Pop’ile stack’den

geriye doğru okunur ve silinir.

REVERSE ESREVER

Page 32: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

32Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Uyg1-String Reverse (devam…)

Page 33: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

33Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Matematiksel bir ifadede veya program kodundaki parantez eşleştirme kontrolünü yapmak için stack kullanılabilir.

Uyg2-Parantez Eşleştirme

Geçerli İfadeler Geçersiz İfadeler{ }( { [ ] } ){ [ ] ( ) }[ { ( { } [ ] ( { })}]

{ ( }( [ ( ( ) ] ){ } [ ] )[ { ) } ( ] } ]

Page 34: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

34Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Algoritma?o Bir açılış parantezi ile karşılaşıldığında “(”, “{”, “[”

stack’e Push edilir. o Bir kapanış parantezi ile karşılaşıldığında “)”, “}”,

“]” stack’e bakılır, stack boş değilse stack’ten bir eleman Pop edilerek, doğru karşılık olup olmadığı kontrol edilir. Doğruysa işlem sürdürülür. Doğru değilse ifade geçersizdir.

o Stack sonuna ulaşıldığında stack boş olmalıdır. Aksi halde açılmış ama kapanmamış parantez olabilir.

Uyg2-Parantez Eşleştirme (devam…)

[A+25*{Y*(B+C-X)-K}/D*(E+13)+M]

Page 35: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

35Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Uyg2-Parantez Eşleştirme (devam…)

Test: [A+25*{Y*(B+C-X)-K}/D*(E+13)+M]

Page 36: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

36Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Polish notasyonu Bilgisayar Bilimleri alanındaki önemli konulardan bir tanesidir. Operatörleri, operandlardan önce veya sonra gösterme metodu olarak tanımlanabilir.o Infix: Bilinen klasik gösterim.o Prefix: Operatörler operandlardan önce yazılır.o Postfix: Operatörler operandlardan sonra yazılır.

Polish Notasyon

Page 37: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

37Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Örnek: A+B • Operatör (işlemci) : + • Operand (işlenenler) A, B • Infix: A+B • Prefix:+AB (benzer bir gösterim add(A,B) fonksiyonu) • Postfix: AB+

Polish Notasyon (devam…)

Infix Postfix

A+B-C

(A+B)*(C-D)

A^B*C-D+E/F/(G+H)

AB+C-

AB+CD-*

AB^C*D-EF/GH+/+

Page 38: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

38Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

• Postfix formda parantez kullanımına gerek yoktur. • Infix Postfix forma çevrilen bir ifadede operand’ların bağlı

olduğu operator’leri (+,-,*,/) görmek zorlaşır - 3 4 5 * + ifadesinin sonucunun 23’e, - 3 4 + 5 * ifadesinin sonucunun 35’e karşılık geldiğini bulmak - Infix gösterime alışık olduğumuz için zor gibi görünür.

• Fakat parantez kullanmadan tek anlama gelen hale dönüşür. İşlemleri, hesaplamaları yapmak kolaylaşır.

• Birçok derleyici 3*2+5*6 gibi bir Infix ifadenin değerini hesaplayacağı zaman Postfix forma dönüştürdükten (belirsizliği ortadan kaldırdıktan sonra) sonucu hesaplar : “3 2 * 5 6 * +”

• Hem InfixPostfix dönüşümünde hem de Postfix hesaplamasında stack kullanılabilir.

Polish Notasyon (devam…)

Page 39: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50+60)• Stack : • Çıkış :

Uyg4-InfixToPostfix

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 40: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50+60)• Stack : (• Çıkış :

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 41: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50+60)• Stack : (• Çıkış : 10

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 42: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50+60)• Stack : ( +• Çıkış : 10

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 43: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50+60)• Stack : ( +• Çıkış : 10 20

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 44: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50+60)• Stack : ( +• Çıkış : 10 20 +

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 45: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50+60)• Stack : (• Çıkış : 10 20 +

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 46: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50+60)• Stack : *• Çıkış : 10 20 +

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 47: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50+60)• Stack : * (• Çıkış : 10 20 +

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 48: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : * (• Çıkış : 10 20 + 30

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 49: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : * ( +• Çıkış : 10 20 + 30

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 50: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : * ( +• Çıkış : 10 20 + 30 40

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 51: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : * ( +• Çıkış : 10 20 + 30 40 +

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 52: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : * ( • Çıkış : 10 20 + 30 40 +

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 53: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : * • Çıkış : 10 20 + 30 40 + *

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 54: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : /• Çıkış : 10 20 + 30 40 + *

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 55: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : / (• Çıkış : 10 20 + 30 40 + *

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 56: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : / (• Çıkış : 10 20 + 30 40 + * 50

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 57: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : / (-• Çıkış : 10 20 + 30 40 + * 50

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 58: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : / (-• Çıkış : 10 20 + 30 40 + * 50 60

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 59: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : / (-• Çıkış : 10 20 + 30 40 + * 50 60

-

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 60: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : / (• Çıkış : 10 20 + 30 40 + * 50 60

-

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 61: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• (10+20)*(30+40)/(50-60)• Stack : /• Çıkış : 10 20 + 30 40 + * 50 60 -

/

Uyg4-InfixToPostfix (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 62: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

62Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

InfixToPostfix Algoritma• Sol parantez ise: Sol parantez yığına Push edilir. • Sağ parantez ise: Sol parantez çıkana kadar yığından Pop

işlemi yapılır. Alınan işlem işareti Postfix ifadeye eklenir. Sol parantez görüldüğünde Pop işlemine son verilir. Sol parantez Postfix’e eklenmez.

• Sayı ise: Postfix ifadeye eklenir. • İşlem işareti ise: Yığının en üstünde sol parantez varsa veya

en üstteki işaretin önceliği bu işaretten düşük ise işlem işareti yığına Push edilir. Bu işaretin önceliği daha düşük ise yığındaki bu işaretten yüksek öncelikli işaretler için Pop işlemi yapılır. Stackten Pop edilenler Postfix ifadeye eklenir. İşlem işareti yığına push edilir.

• İfadeler bittiğinde: Yığındaki işaretler sıra ile Pop edilerek postfix ifadeye eklenir.

Page 63: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

63Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Postfix Çözümleme Algoritma• Postfix ifade soldan sağa doğru değerlendirilir.

Eğer o anda bakılan:o Sayı ise: Sayı yığına push edilir. o İşlem işareti ise:

o Yığının üstündeki iki değer pop edilerek aralarında bu işlem yapılır.

o İşlem sonucu yığının en üstüne push edilir.

Page 64: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

3

Uyg5-Postfix Değerlendirme

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 65: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

3

4

Uyg5-Postfix Değerlendirme (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 66: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

7

Uyg5-Postfix Değerlendirme (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 67: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

7

5

Uyg5-Postfix Değerlendirme (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 68: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

7

5

6

Uyg5-Postfix Değerlendirme (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 69: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

7

30

Uyg5-Postfix Değerlendirme (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 70: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

7

30

9

Uyg5-Postfix Değerlendirme (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 71: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

7

30

9

2

Uyg5-Postfix Değerlendirme (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 72: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

7

30

7

Uyg5-Postfix Değerlendirme (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 73: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

7

37

Uyg5-Postfix Değerlendirme (devam…)

Page 74: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

• Örnek: 3 4 + 5 6 * 9 2 - + *

259

Uyg5-Postfix Değerlendirme (devam…)

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 75: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Stack İşlem Karmaşıklığı• Dizi ile tanımlanan stack’ta boyut önceden belirli

olmalıdır. • Bu bağlamda stack’taki eleman sayısı n olarak kabul

edilirse bir stack için (dizi ve bağlı liste için) işlem karmaşıklıkları aşağıdaki gibidir.

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 76: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Recursion

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

public void Uygulama2(Node test) { if (test == null) return;

MessageBox.Show(test.Data.ToString());

if (test.Next != null) Uygulama2(test.Next.Next);

MessageBox.Show(test.Data.ToString());}

Test: 123456

Page 77: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

Recursion

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Test Next.Next Print1 Durum Print2

1 3 1 Devam -

3 5 3 Devam -

5 Null 5 Çıktı 5

3 5 - KalDevÇık 3

1 3 - KalDevÇık 1

Page 78: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

İYİ ÇALIŞMALAR…

Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Page 79: Yzm 2116 - Bölüm 4 (Stack, Yığın, Yığıt)

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ı