YIĞINLAR YIĞINLAR. Yığın İşlemleri Postfix, Prefix, Infix. G. Ü. Bilgisayar Mühendisliği Bölümü

Benzer belgeler
YZM 2116 Veri Yapıları

BAĞLI LİSTELER BAĞLI LİSTELER

VERİ YAPILARI DERS NOTLARI BÖLÜM 4 STACK (YIĞIN, YIĞIT) Yard. Doç. Dr. Deniz KILINÇ

Ağaçlar (Trees) Ağaçlar (Trees)

STACK (ÇIKIN-YIĞIN-YIĞIT) VERİ YAPISI LAST-IN-FIRST-OUT LIFO VERİ YAPISI

VERİ YAPILARI VE PROGRAMLAMA

YIĞIT STACK. Yrd. Doç. Dr. Aybars UĞUR

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

Yigin & Kuyruk {\} /\ Suhap SAHIN Onur GÖK

Arasınav Örnek Soruları Bahar 2018

Stack Islemleri. Postfix ve Infix notasyonlari. Stack ozellikleri

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Bölüm 8. Ayrık Küme. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 16

Final Sınavı Soruları Güz, Süre: 90 Dakika

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

Turkcell Paf Takımı Proje Raporu. Hazırlayan : Oben IŞIK

SOMEBODY ELSE'S. ( DATA STRUCTURES and ALGORITHMS ) Veri Yapıları ve Algoritmaları

Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları

Özyineleme (Recursion)

YIĞIT STACK. Doç. Dr. Aybars UĞUR

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Çok Yollu Ağaçlar (Multi-Way Trees)

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

Java da İşleçler, Ders #3 (4 Kasım 2009)

Göstericiler (Pointers)

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

Veri Yapıları Laboratuvarı

Yrd. Doç. Dr. Caner ÖZCAN

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

VERİ YAPILARI DERS NOTLARI BÖLÜM 5 QUEUE (KUYRUK) Yard. Doç. Dr. Deniz KILINÇ

NESNEYE YÖNELİK PROGRAMLAMA

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

BİL-141 Bilgisayar Programlama I (Java)

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

YZM 2116 Veri Yapıları

Eln 1002 Bilgisayar Programlama II

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

YZM 2116 Veri Yapıları

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI

Class LinkedList java.lang.object java.util.abstractcollection java.util.abstractlist java.util.abstractsequentiallist java.util.

Görsel Programlama 1

Hafta 12 Karakter Tutan Diziler

1 NEDEN PROGRAMLAMA ÖĞRENMELIYIZ?

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

1 JAVASCRIPT NEDİR? 1

ALGORİTMA VE PROGRAMLAMA I

C# Örnek Uygulamalar I

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

YMT219 VERİ YAPILARI ÖDEV-1

GENETİK ALGORİTMA GEZGİN SATICI ÖDEVİ

BMT207 VERİ YAPILARI DATA STRUCTURE

Dr. Fatih AY Tel: fatihay@fatihay.net

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

KUYRUKLAR. Doç. Dr. Aybars UĞUR

ALGORİTMA VE PROGRAMLAMA I

VERİ YAPILARI VE PROGRAMLAMA

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

DÖNGÜLER BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA DENEY-4 FÖYÜ GİRİŞ LABORATUARI.

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-2 Değişken Kavramı ve Temel Operatörler

Week 6: Bağlı Liste (Linked List) BAĞLI LİSTE KAVRAMI TEKİL (SINGLE) BAĞLI LİSTE ÇİFT (DOUBLE) BAĞLI LİSTE DAİRESEL (CIRCULAR) BAĞLI LİSTE

Veri Modelleri. Ağaç Veri Modeli. Ağaç Veri Modeli

BİLG Dr. Mustafa T. Babagil 1

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

C++ Dersi: Nesne Tabanlı Programlama

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Graflar bilgi parçaları arasındaki ilişkileri gösterirler.

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Length: metin uzunluğunu yada diğer bir deyişle dizi elaman sayısını döndürür.

Bölüm 5. Ağaç. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 73

Burak Kıymaz JAVA FX

Ders 3 ADRESLEME MODLARI ve TEMEL KOMUTLAR

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Yrd. Doç. Dr. Caner ÖZCAN

1 PROGRAMLAMAYA GİRİŞ

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

BİL1001 Bilgisayar Bilimlerine Giriş 1

Bahar Dönemi. Öğr.Gör. Vedat MARTTİN

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

C++ Dersi: Nesne Tabanlı Programlama

Karşılaştırma İşlemleri ve Koşullu İfadeler

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

C++ Dersi: Nesne Tabanlı Programlama

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

Dizi ( Array ) ve Dizgi ( String )

Transkript:

Yığın İşlemleri Postfix, Prefix, Infix Yrd.Doç.Dr. M. Ali Akcayol 1

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ı 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). push pop Son eklenen Üst (headnode) İlk eklenen 2

Örnek kullanım yerleri : Yazılım uygulamalarındaki Undo işlemleri stack ile yapılır. Undo işlemi için LIFO yapısı kullanılır. Web browser lardaki Back butonu (önceki sayfaya) stack kullanır. Buradada LIFO yapısı kullanılır Matematiksel işlemlerdeki operatörler (+,*,/,- gibi) ve operandlar için stack kullanılabilir. Yazım kontrolündeki parantezlerin kontrolünde stack kullanılabilir. 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; headnode stackc kitapyigin = new stackc(""); 3

Stack işlemleri : boş yığın stacksize() == 0 eleman sayısı stacksize() eleman ekleme push(kitapadi) eleman alma pop() headnode public int stacksize() stacknodec aktif = new stacknodec(""); aktif = kitapyigin.headnode; int i = 0; while (aktif.sonraki!= aktif) aktif = aktif.sonraki; i++; return i; 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()); headnode 4

Stack işlemleri (eleman alma) headnode public void pop() if (stacksize() == 0) MessageBox.Show("Yığında eleman yok!", "Dikkat"); else kitapyigin.headnode = kitapyigin.headnode.sonraki; Örnek: Parantez unutma hatalarını bulma */,, ) or ]. Normal yazım şekli [()], Hatalı yazım şekli [(]). İşlem sırası [ ( ) ] 5

Örnek: Parantez unutma hatalarını bulma */,, ) or ]. Normal yazım şekli [()], Hatalı yazım şekli [(]). İşlem sırası [ [ ( ) ] Örnek: Parantez unutma hatalarını bulma */,, ) or ]. Normal yazım şekli [()], Hatalı yazım şekli [(]). İşlem sırası [ ( ) ] ( [ 6

Örnek: Parantez unutma hatalarını bulma */,, ) or ]. Normal yazım şekli [()], Hatalı yazım şekli [(]). İşlem sırası [ [ ( ) ] Örnek: Parantez unutma hatalarını bulma */,, ) or ]. Normal yazım şekli [()], Hatalı yazım şekli [(]). İşlem sırası [ ( ) ] 7

Örnek: Parantez unutma hatalarını bulma */,, ) or ]. Normal yazım şekli [()], Hatalı yazım şekli [(]). İşlem sırası [ ( ) ] İşlem: (a+b-c*[d+(a+b)) Stack: ( ( ( ([ ([( ([ Hata! 8

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 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 9

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

Örnek Labirent Oyunu (Maze): Backtraking uygulaması 11

12

13

14

15

16

17

18

19

Uygulama programı (Stacks ve Queues): Uygulama programı (Maze - Stack): 20

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. Gelecek Hafta Kuyruklar (Queues) 21