KUYRUKLAR. Doç. Dr. Aybars UĞUR

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

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

YZM 2116 Veri Yapıları

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

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

BAĞLAÇLI LİSTELER LINKED LISTS

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

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

BAĞLAÇLI LİSTELER LINKED LISTS

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

Arasınav Örnek Soruları Bahar 2018

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

ArrayList Uygulamaları

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

YMT219 VERİ YAPILARI ÖDEV-1

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

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

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

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

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

Java String İşlemleri

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

I Java Veri Yapıları 1

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

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

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

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

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

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

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

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.

JAVADA DİZİ İŞLEMLERİ

Dizi ( Array ) ve Dizgi ( String )

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

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;

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

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

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

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

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

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

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

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

Queue (kuyruk) Arayüzü

BİL-141 Bilgisayar Programlama I (Java)

YZM 2116 Veri Yapıları

HASH(KARMA) TABLOSU VERİ YAPISI

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

Veri Yapıları ve Algoritmalar dönem

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

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

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

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

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

11- FONKSİYONLAR (FUNCTIONS)

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

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

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

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

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

7. HAFTA. Erişim Belirleyiciler

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

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:

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

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

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

Koleksiyonlar (Collections)

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

Merge Sort Bireşen Sıralama

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

YZM 2116 Veri Yapıları

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 11: Metot Kavramı

Yığın (Stack) devam. Infix, Postfix, & Prefix Gösterimleri

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 8: Sınıf (Class) Yapılarına Giriş

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 4. Yrd.Doç.Dr.Hacer Karacan

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

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

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

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

ATATÜRK ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BIM 205 GÖRSEL PROGRAMLAMA GÜZ DÖNEMİ ÖDEV-1

// hataları işaret eden referans

Klavyeden Basit Giriş/Çıkış İşlemleri

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

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

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

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

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

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

Ders - 7 while döngüsü

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

Spring Framework Eğitimi

OPERATÖRLER Alıştırmalar

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

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

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

Alıştırmalar 2 - Dağıtık Sistemler. Alıştırma 2. Prof. Dr. Th. Letschert Çeviri: Turgay Akbaş FB MNI 16. Mai 2013

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. Veri Yapıları : 06 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) Veri Yapıları : 06 KUYRUKLAR 3

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); Veri Yapıları : 06 KUYRUKLAR 4

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()); Veri Yapıları : 06 KUYRUKLAR 5

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) Queue<String> q=new LinkedList<String>(); while(itr.hasnext()) String iteratorvalue=(string)itr.next(); System.out.println("Queue Next Value :"+iteratorvalue); // Kuyruktaki ilk değeri alır System.out.println("Queue peek :"+q.peek()); // Kuyruktaki ilk değeri alır ve kuyruktan çıkarır System.out.println("Queue poll :"+q.poll()); q.add("a1"); 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 Veri Yapıları : 06 KUYRUKLAR Final Size of Queue :4 6

Öncelik Kuyruğu - I Yığıtlarda ve kuyruklarda elemanlar eklenme sırasında 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. Veri Yapıları : 06 KUYRUKLAR 7

Ö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. Veri Yapıları : 06 KUYRUKLAR 8

ALIŞTIRMALAR Java ile Aşağıdaki Öncelik Kuyruğu Sınıflarını Tasarlayıp Yazınız (Altyapıda dizi, ArrayList ve Vector 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 Veri Yapıları : 06 KUYRUKLAR 9

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 Veri Yapıları : 06 KUYRUKLAR 10

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 Veri Yapıları : 06 KUYRUKLAR 11

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. Veri Yapıları : 06 KUYRUKLAR 12