• Sonuç bulunamadı

Yrd.Doç.Dr. M. Ali Akcayol G. Ü. Bilgisayar Mühendisliği Bölümü

N/A
N/A
Protected

Academic year: 2021

Share "Yrd.Doç.Dr. M. Ali Akcayol G. Ü. Bilgisayar Mühendisliği Bölümü"

Copied!
21
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

z Yığın İşlemleri

z Postfix, Prefix, Infix

Yrd.Doç.Dr. M. Ali Akcayol G. Ü. Bilgisayar Mühendisliği Bölümü

YIĞINLAR

(2)

G. Ü. Bilgisayar Mühendisliği Bölümü

• Yığındaki elemanlardan sadece en son eklenene erişim yapılır.

• Yığına ilk eklenen eleman en son elde edilir.

• FILO (First-in-Last-out) veya

LIFO (Last-in-First-out) mantığıyla çalışır.

• İki tane temel işlem yapılabilir ;

- push, yığının sonuna yeni bir eleman ekleme

- pop, yığının en üstündeki elemanın alınması

YIĞINLAR

Dizilerle veya bağlı listelerle yapılabilir.

Dizilerde boyut değiştirme ve yeni elemen ekleme zorluğundan dolayı genellikle bağlı dizilerle yapılır.

En üst veya en son elemanı gösteren bir node tanımlanır (headNode).

Üst (headNode)

push pop

Son eklenen

(3)

G. Ü. Bilgisayar Mühendisliği Bölümü

Örnek kullanım yerleri :

z

Yazılım uygulamalarındaki Undo işlemleri stack ile yapılır.

Undo işlemi için LIFO yapısı kullanılır.

z

Web browser’lardaki Back butonu (önceki sayfaya) stack kullanır.

Buradada LIFO yapısı kullanılır

z

Matematiksel işlemlerdeki operatörler (+,*,/,- gibi) ve operandlar için stack kullanılabilir.

z

Yazım kontrolündeki parantezlerin kontrolünde stack kullanılabilir.

YIĞINLAR

headNode

kitapAdı

kitapAdı

kitapAdı Stack oluşturma :

class stackNodeC {

public string kitapAdi;

public stackNodeC sonraki;

public stackNodeC(string kitapAdi) {

this.kitapAdi = kitapAdi;

} }

class stackC {

public stackNodeC headNode;

public stackC(string kitapAdi) {

this.headNode = new stackNodeC(kitapAdi);

this.headNode.sonraki = headNode;

} }

stackC kitapYigin = new stackC("");

(4)

G. Ü. Bilgisayar Mühendisliği Bölümü

Stack işlemleri :

z

boş yığın stackSize() == 0

z

eleman sayısı stackSize()

z

eleman ekleme push(kitapAdi)

z

eleman alma pop()

public int stackSize() {

stackNodeC aktif = new stackNodeC("");

aktif = kitapYigin.headNode;

int i = 0;

while (aktif.sonraki != aktif) {

aktif = aktif.sonraki;

i++;

} return i;

}

headNode

kitapAdı

kitapAdı

kitapAdı

YIĞINLAR

Stack işlemleri (eleman ekleme) public void push(string kitapAdi) {

if (stackSize() >= MaxSize)

MessageBox.Show("Yığın maksimum elemana sahip ! Yeni eleman eklenemez !", "Dikkat");

else {

stackNodeC yeniNode = new stackNodeC(tBKitapAdi.Text);

yeniNode.sonraki = kitapYigin.headNode;

kitapYigin.headNode = yeniNode;

lStackSize.Text = "Stack Size =

"+Convert.ToString(stackSize());

} }

kitapAdı

kitapAdı

headNode

(5)

G. Ü. Bilgisayar Mühendisliği Bölümü Stack işlemleri (eleman alma)

public void pop() {

if (stackSize() == 0) {

MessageBox.Show("Yığında eleman yok !", "Dikkat");

} else {

kitapYigin.headNode = kitapYigin.headNode.sonraki;

} }

kitapAdı

kitapAdı

kitapAdı

headNode

Örnek:

Parantez unutma hatalarını bulma */, }, ) or ].

Normal yazım şekli —[()], Hatalı yazım şekli [(]).

İşlem sırası {…[…(…)…]…}

{

YIĞINLAR

(6)

İşlem sırası {…[…(…)…]…}

[ {

zG. Ü. Bilgisayar Mühendisliği Bölümü

Örnek:

Parantez unutma hatalarını bulma */, }, ) or ].

Normal yazım şekli —[()], Hatalı yazım şekli [(]).

İşlem sırası {…[…(…)…]…}

( [ {

YIĞINLAR

Örnek:

Parantez unutma hatalarını bulma */, }, ) or ].

Normal yazım şekli —[()],

Hatalı yazım şekli [(]).

(7)

İşlem sırası {…[…(…)…]…}

[ {

zG. Ü. Bilgisayar Mühendisliği Bölümü

Örnek:

Parantez unutma hatalarını bulma */, }, ) or ].

Normal yazım şekli —[()], Hatalı yazım şekli [(]).

İşlem sırası {…[…(…)…]…}

{

YIĞINLAR

Örnek:

Parantez unutma hatalarını bulma */, }, ) or ].

Normal yazım şekli —[()],

Hatalı yazım şekli [(]).

(8)

İşlem sırası {…[…(…)…]…}

zG. Ü. Bilgisayar Mühendisliği Bölümü

Örnek:

Parantez unutma hatalarını bulma */, }, ) or ].

Normal yazım şekli —[()], Hatalı yazım şekli [(]).

İşlem:

(a+{b-c}*[d+(a+b)) Stack:

• (

• ({

• (

• ([

• ([(

• ([

YIĞINLAR

Hata !

(9)

Infix, Postfix, Prefix:

Infix ( ( A / ( B ^ C ) ) – ( ( D * E ) – ( A * C ) ) ) ( ( A / ( B ^ C ) ) – ( ( D * E ) – ( A * C ) ) )

Postfix A B C ^ / D E * A C * – –

( ( A / ( B ^ C ) ) – ( ( D * E ) – ( A * C ) ) )

Prefix – / A ^ B C – * D E * A C

zG. Ü. Bilgisayar Mühendisliği Bölümü

Postfix Örnek:

Aşağıdaki infix gösterimini postfix haline dönüştürünüz.

Infix A * B + ( C – D / E ) postfix AB*CDE/-+

ch opstack postfix açıklama ch opstack postfix açıklama

# push # + AB* pop * –>postfix, push ch

A read ch #

A ch –> postfix ( read ch

* read ch ( push ch

* push ch +

# #

B read ch C read ch

AB ch –> postfix AB*C ch –> postfix

+ read ch - read ch

YIĞINLAR

(10)

Postfix Örnek (devam):

Infix A * B + ( C – D / E )

ch opstack postfix açıklama ch opstack postfix açıklama

- push ch (

( +

+ #

# E read ch

D read ch AB*CDE ch -> postfix

AB*CD ch –> postfix ) read ch

/ read ch AB*CDE/- ( paranteze kadar pop

/ push ch + read ch

- AB*CDE/-+ ch -> postfix

# AB*CDE/-+# pop # -> postfix

zG. Ü. Bilgisayar Mühendisliği Bölümü

Postfix Kurallar ve İşlemler:

1. opstack yığınını # işareti ekleyerek başlat 2. infix içinden bir sonraki karakteri (ch) oku

• Eğer ch operand ise postfix’e ekle

• Eğer ch sağ parantez ise opstack’ta sol parantezi görene kadar tüm operatörleri pop yap ve postfix’e ekle

• Eğer ch bir operatör ise opstack’taki önceki operatörleri # işaretini görene kadar pop yap ve postfix’e ekle

3. Opstack’taki son # işaretini görene kadar 1. ve 2. adımları tekrar et.

YIĞINLAR

(11)

Örnek Labirent Oyunu (Maze): Backtraking uygulaması

zG. Ü. Bilgisayar Mühendisliği Bölümü

(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)

Uygulama programı (Stacks ve Queues):

zG. Ü. Bilgisayar Mühendisliği Bölümü

Uygulama programı (Maze - Stack):

YIĞINLAR

(21)

G. Ü. Bilgisayar Mühendisliği Bölümü

Haftalık Ödev:

1- Örnek programı verilen Maze (Labirent) uygulamasını 12x12 boyutunda yeniden düzenleyiniz. Başlangıç olarak istediğimiz noktadan başlayabilmemizi sağlayınız.

2- postfix olarak yazılmış ifadeyi hesaplayarak sonucu bulan bir program yazınız. Örnek olarak 5 3 2 - / 4 7 * + ifadesinin sonucunu bulunuz. Sonuç = 33 olarak bulunacak.

YIĞINLAR

Gelecek Hafta Kuyruklar

(Queues)

Referanslar

Benzer Belgeler

3-4 glin slireyle iz- Iendi, ilag tesiri ge<;tikten sonra a§ikar abstinen semptomu go.sterme- di ancak, uykusuzluk, halsizlik, entellektliel faaliyet ve dli~lince akt- mmda

sbyte, byte, short, , byte, short, ushort ushort, , int int, , uint uint, long, , long, ulong ulong, float, , float, double, decimal, char,}. double, decimal, char, bool

Her eleman alımında (dequeue) ise kuyruktaki en yüksek seviyeli grubun ilk

Seyahat acentaları maddeleri için, en az dört yıllık üniversite mezunu seyahat acentası çalışanları da yazarlık başvurusunda bulunabilir.. Konvoy Tur (Ankara, Afşin

Tezin esas amacı yaklaĢımlar teorisinde yapılan çok çeĢitli çalıĢmalar ve bu çalıĢmalarda verilen farklı Lineer Pozitif Operatörleri göz önüne alarak

Szász- Mirakjan operatörleri, Bernstein operatörlerinin sınırsız aralıklara genelleştirilmisi olarak tanımlanmıştır[13]. Bu bölümde yeni bir yaklaşım sürecinin

Araştırmada çağrı merkezi çalışanlarının son tatil zamanına göre tatil satın alma kararını etkileyen faktörlerden; itme, çekme ve tatil deneyimine

Su, benzen ve petrol ete- rinde çözünmez; alkol, aseton, etil asetat ve kloroformda çözünür. Değişik Konsantrasyonlarcl:ı Bileşik İçeren Sıvı Besi Yet -