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



Benzer belgeler
KUYRUKLAR. Doç. Dr. Aybars UĞUR

YZM 2116 Veri Yapıları

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

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

BAĞLAÇLI LİSTELER LINKED LISTS

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

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

BAĞLAÇLI LİSTELER LINKED LISTS

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

ArrayList Uygulamaları

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

Arasınav Örnek Soruları Bahar 2018

YMT219 VERİ YAPILARI ÖDEV-1

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

Sınav Dağılım & IMKB Endeks

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

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.

I Java Veri Yapıları 1

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

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

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

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form

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

static void dizi_24() { Random rnd = new Random(); int [] tutulan=new int[10]; int dogru;

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

Java String İşlemleri

SIRALAMA SORTING. Yrd. Doç. Dr. Aybars UĞUR

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

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

11- FONKSİYONLAR (FUNCTIONS)

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler:

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

JAVADA DİZİ İŞLEMLERİ

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

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

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

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

D İ Z İ L E R A R R A Y S

Dizi ( Array ) ve Dizgi ( String )

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

Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR

elemanlarının gezilmesine yönelik bir örnek sunulmuştur, inceleyiniz.

ALGORTMA ve PROGRAMLAMA - II (C# Sürümü) DERS NOTLARI

Programlama Dilleri 3

AĞAÇLAR TREES. Doç. Dr. Aybars UĞUR

NESNEYE DAYALI PROGRAMLAMA 11. HAFTA UYGULAMA DERSİ

Şablon Türler (Generics)

Akış Konrol Mekanizmaları

HASH(KARMA) TABLOSU VERİ YAPISI

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

AĞAÇLAR. Doç. Dr. Aybars UĞUR

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

Veri Yapıları ve Algoritmalar dönem

NESNE TABANLI PROGRAMLAMA-2 DERS UYGULAMALARI-1

BAŞLAYINIZ DENİLMEDEN SORU KİTAPÇIĞINI AÇMAYINIZ.

Standard Template Library

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

Nesneye Dayalı Programlama

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

Koleksiyonlar (Collections)

Operator Aşırı Yükleme (Operator OverLoading)

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

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Görsel Programlama 1

PROGRAMLAMA TEMELLERİ DERSİ ÖZETİ

Örnek 1: Programı yazın ve çalıştırın.

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Doç. Dr. Aybars UĞUR

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

Programlama Dilleri 3

YZM 2116 Veri Yapıları

OPERATÖRLER Alıştırmalar

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

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

1. Her marka için 3 aylık satış toplamı nedir? (Tablodaki satır toplamları)

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

Bilgisayar Programcılığı. Ögr. Gör. Cansu AYVAZ GÜVEN

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Lambda İfadeleri (Lambda Expressions)

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 4. UYGULAMA

BİL-141 Bilgisayar Programlama I (Java)

Class HashSet. Metotlar. Class HashSet java.lang.object java.util.abstractcollection java.util.abstractset java.util.hashset

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

Soru 1: Fahrenheit cinsinden verilen sıcaklığı Kelvin'e çeviren bir program yazınız. Aşağıdaki dönüşüm formülünü kullanabilirsiniz:

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

Nesne Tabanlı Programlama

T.C. MARMARA ÜNİVERSİTESİ BİLGİSAYAR VE ÖĞRETİM TEKNOLOJİLERİ ÖĞRETMENLİĞİ BÖLÜMÜ EĞİTİM ÖĞRETİM YILI PROGRAMLAMA DERSİ KAPSAMINDA YAPILAN

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

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

Nesneler için torbalar (Collections) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 12 1

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 9. UYGULAMA

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

// hataları işaret eden referans

Java dili, aşağıdakiler de dahil olmak üzere çok çeşitli denetleyici türlerine sahiptir.

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

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

Transkript:

KUYRUKLAR QUEUES Doç. Dr. Aybars UĞUR

Giriş Bu bölümde gerçek yaşamdaki kuyrukların bilgisayardaki gösterimleri üzerinde durulacaktır. Kuyruklar, eleman eklemelerin sondan (rear) ve eleman çıkarmaların baştan (front) yapıldığı veri yapılarıdır. Bir eleman ekleneceği zaman kuyruğun sonuna eklenir. Bir eleman çıkarılacağı zaman kuyrukta bulunan ilk eleman çıkarılır. Bu eleman da kuyruktaki elemanlar içinde ilk eklenen elemandır. Bu nedenle kuyruklara FIFO (First-In First-Out = ilk giren ilk çıkar) listeleri de denilmektedir. Gerçek yaşamda da bankalarda, duraklarda, gişelerde, süpermarketlerde, otoyollarda kuyruklar oluşmaktadır. Kuyruğa ilk olarak girenler işlemlerini ilk olarak tamamlayıp kuyruktan çıkarlar. Veri yapılarındaki kuyruklar bu tür veri yapılarının simülasyonunda kullanılmaktadır. Ayrıca işlemci, yazıcı, disk gibi kaynaklar üzerindeki işlemlerin yürütülmesinde ve bilgisayar ağlarında paketlerin yönlendirilmesinde de kuyruklardan yararlanılmaktadır. KUYRUKLAR 2

Kuyruk İşlemleri ve Tanımları insert(q,x) : q kuyruğunun sonuna x elemanını ekler. (enqueue) x=remove(q) : q kuyruğunun başındaki elemanı silerek x'e atar. (dequeue) KUYRUKLAR 3

class Kuyruk Bir Kuyruk Sınıfı Tasarımı C# ile Gerçekleştirimi - I // Diziler üzerinde bir double kuyruğu private int boyut; private double[] kuyrukdizi; private int baş, son; private int elemansayısı; public Kuyruk(int s) // Yapılandırıcı boyut = s; kuyrukdizi = new double[boyut]; baş = 0; son = -1; elemansayısı = 0; public void enque(double j) // Kuyruk sonuna eleman ekler if(son == boyut-1) // başa dönme durumu son = -1; kuyrukdizi[++son] = j; // sonu arttır ve ekle elemansayısı++; 4

Bir Kuyruk Sınıfı Tasarımı C# ile Gerçekleştirimi - II public double deque() // Kuyruğun başından bir eleman çıkarır double temp = kuyrukdizi[baş++]; // Değeri alıp başı arttır if(baş == boyut) // başa dönme durumu baş = 0; elemansayısı--; return temp; public bool bosmu() // true, Kuyruk boş ise return (elemansayısı==0); // end class Kuyruk KUYRUKLAR 5

Tasarlanan Kuyruk Sınıfının Kullanımı 1'den 10'a kadar olan sayıları kuyruğa yerleştirip sırayla çıkaran program class Program static void Main(string[] args) Kuyruk k = new Kuyruk(25); k.enque(1); k.enque(2); Console.WriteLine(k.deque()); // 1 k.enque(3); for(int i=4; i<10; ++i) k.enque(i); while(!k.bosmu()) Console.WriteLine(k.deque()); KUYRUKLAR 6

C# Hazır Kuyruk Sınıfının Kullanımı static void Main(string[] args) Queue kuyruk = new Queue(); kuyruk.enqueue("bir"); kuyruk.enqueue("iki"); kuyruk.enqueue("üç"); yazdir(kuyruk); string str = (string) kuyruk.dequeue(); yazdir(kuyruk); static void yazdir(ienumerable koleksiyonum) foreach (Object obj in koleksiyonum) Console.Write("0 ", obj); Console.WriteLine(); Ekran Çıktısı : Bir İki Üç İki Üç C# ortamında Generic Queue sınıfı da vardır. KUYRUKLAR 7

Java ile Bir Kuyruk Sınıfı // Diziler üzerinde bir tamsayı kuyruğu class Kuyruk private int boyut; private int[] kuyrukdizi; private int bas; private int son; private int elemansayisi; // Yapılandırıcı Metot (Constructor) public Kuyruk(int s) boyut = s; kuyrukdizi = new int[boyut]; bas = 0; son = -1; elemansayisi = 0; public void ekle(int j) // Kuyrugun sonuna eleman ekler if (son==boyut-1) son = -1; kuyrukdizi[++son] = j; elemansayisi++; public int cikar() int temp = kuyrukdizi[bas++]; if(bas==boyut) bas=0; elemansayisi--; return temp; public boolean bosmu() return(elemansayisi==0); KUYRUKLAR 8

Hazırlanan Kuyruk Sınıfının Kullanımı // 1'den 10'a kadar olan sayilari kuyruga yerlestirip // sırayla çıkaran program public class KuyrukTest public static void main(string args[]) Kuyruk k = new Kuyruk(25); k.ekle(1); k.ekle(2); System.out.println(k.cikar()); // 1 k.ekle(3); for(int i=4; i<10; ++i) k.ekle(i); while(!k.bosmu()) System.out.println(k.cikar()); KUYRUKLAR 9

Java Hazır Kuyruk Sınıfının Kullanımı import java.util.iterator; import java.util.linkedlist; import java.util.queue; public class QueueExample public static void main(string[] args) while(itr.hasnext()) String iteratorvalue=(string)itr.next(); System.out.println("Queue Next Value :"+iteratorvalue); Queue<String> q=new LinkedList<String>(); // Kuyruktaki ilk değeri alır System.out.println("Queue peek :"+q.peek()); // Kuyruktaki ilk değeri alır ve kuyruktan çıkarır q.add("a1"); System.out.println("Queue poll :"+q.poll()); q.add("a2"); q.add("a3"); q.add("a4"); System.out.println("Final Size of Queue :"+q.size()); q.add("a5"); Initial Size of Queue :5 Iterator itr=q.iterator(); Queue Next Value :A1 Queue Next Value :A2 System.out.println("Initial Size of Queue :"+q.size()); Queue Next Value :A3 Queue Next Value :A4 Queue Next Value :A5 Queue peek :A1 Queue poll :A1 KUYRUKLAR Final Size of Queue :4 10

Öncelik Kuyruğu - I Yığıtlarda ve kuyruklarda elemanlar eklenme sırasına dayalı olarak sıralanırlar. Yığıtlarda ilk olarak son eklenen, kuyruklarda ise ilk eklenen eleman çıkarılır. Elemanlar arasındaki gerçek sıralama (sayısal sıra veya alfabetik sıra gibi) dikkate alınmaz. Öncelik kuyrukları, temel kuyruk işlemlerinin sonuçlarını elemanların gerçek sırasının belirlediği veri yapılarıdır. Azalan ve artan sırada olmak üzere iki tür öncelik kuyruğu vardır. Artan öncelik kuyruklarında elemanlar herhangi bir yere eklenebilir ama sadece en küçük eleman çıkarılabilir. apq, artan öncelik kuyruğu olmak üzere pqinsert(apq,x) x elemanını kuyruğa ekler ve pqmindelete(apq) en küçük elemanı kuyruktan çıkararak değerini döndürür. Azalan öncelik kuyruğu ise artan öncelik kuyruğunun tam tersidir. KUYRUKLAR 11

Öncelik Kuyruğu - II Artan öncelik kuyruğunda önce en küçük eleman, sonra ikinci küçük eleman sırayla çıkarılacağından dolayı elemanlar kuyruktan artan sırayla çıkmaktadırlar. Birkaç eleman çıkarıldıktan sonra ise daha küçük bir eleman eklenirse doğal olarak kuyruktan çıkarıldığında önceki elemanlardan daha küçük bir eleman çıkmış olacaktır. Öncelik kuyruklarında sadece sayılar veya karakterler değil karmaşık yapılar da olabilir. Örnek olarak telefon rehberi listesi, soyad, ad, adres ve telefon numarası gibi elemanlardan oluşmaktadır ve soyada göre sıralıdır. Öncelik kuyruklarındaki elemanların sırasının elemanların alanlarından birisine göre olması gerekmez. Elemanın kuyruğa eklenme zamanı gibi elemanların alanları ile ilgili olmayan dışsal bir değere göre de sıralı olabilirler. Öncelik kuyruklarının gerçekleştiriminde dizi kullanımı etkin bir yöntem değildir. KUYRUKLAR 12

ALIŞTIRMALAR C# ile Aşağıdaki Öncelik Kuyruğu Sınıflarını Tasarlayıp Yazınız (Altyapıda dizi, ArrayList ve List yapılarını kullanabilirsiniz): a) Tüm elemanları string olan b) Tüm elemanları double olan c) Tüm elemanları Ogrenci (no, ad, soyad, ort) sınıfı şeklinde olan Ada göre alfabetik sırada öncelikli Ortalamaya göre yüksekten düşüğe göre öncelikli KUYRUKLAR 13

Java daki Hazır Öncelik Kuyruğunun Kullanımı import java.util.*; public class PriorityQueueDemo public static void main(string[] args) PriorityQueue<String> stringqueue = new PriorityQueue<String>(); stringqueue.add("masa"); stringqueue.add("sıra"); stringqueue.add("sandalye"); stringqueue.add("dolap"); Iterator<String> itr = stringqueue.iterator(); while(itr.hasnext()) System.out.println(itr.next()); // Dolaşma while(stringqueue.size() > 0) System.out.println(stringQueue.remove()); // Silme Dolap Masa Sandalye S²ra Dolap Masa Sandalye S²ra KUYRUKLAR 14

Sınıfın Bir Üyesine Göre (ad) Öncelik Kuyruğu import java.util.comparator; import java.util.priorityqueue; class Urun String ad; int fiyat; public Urun (String adi, int fiyati) ad = adi; fiyat = fiyati; class UrunComparator implements Comparator public int compare(object v1,object v2) return ((Urun)v1).ad.compareTo(((Urun)v2).ad); public class Test public static void main(string[] args) Comparator comparator = new UrunComparator(); PriorityQueue kuyruk = new PriorityQueue(10,comparator); kuyruk.add(new Urun("Masa", 10)); kuyruk.add(new Urun("Dolap", 15)); kuyruk.add(new Urun("Sandalye", 5)); while (kuyruk.size()!= 0) Urun u = (Urun)kuyruk.remove(); System.out.println(u.ad+" "+u.fiyat); Dolap 15 Masa 10 Sandalye 5 KUYRUKLAR 15

Alıştırmalar Urun sınıfının ad üyesine göre büyükten küçüğe sıralı bir öncelik kuyruğu oluşturacak şekilde UrunComparator sınıfını değiştiriniz. Urun sınıfının fiyat üyesine göre küçükten büyüğe sıralı bir öncelik kuyruğu oluşturacak şekilde UrunComparator sınıfını değiştiriniz. KUYRUKLAR 16