C# Queue Class

Merhaba arkadaşlar,

Collections nesnelerini daha iyi anlamak için System.Collection isim alanında bulunan bazı arayüzleri uygulayarak kendi koleksiyon nesnelerimizi geliştirip işin mutfağında neler oluyor öğrenmeye çalışmıştık. System.Collection isim alanında bulunan arayüz ve koleksiyon tabanlı sınıflar ile ilgili serime burada ulaşabilirsiniz.

Bu yazımda .Net Platformunda hazır bulunan koleksiyon tabanlı Queue sınıfını inceleyeceğiz. Queue sınıfının temel düzeyde özellikleri ve metotlarını ele alıp örnek üzeriden pekiştiriyor olacağız.

Bu yazı için motivasyon cümlemiz:

Geçmişiniz, geleceğiniz değildir.

Queue kelimesinin Türkçe karşılığı kuyruktur. Yani kuyruk ise art arda oluşan oluşan sıralı bir dizidir. Basitçe bir otobüs durağında sıra bekleyen insanları veya bir gişe önünde bekleyen insanları düşünebilirsiniz.

Queue veri yapısı çalışma prensibi stack (yığın) yapısına benzer ama çalışma prensipleri yani algoritmaları farklıdır. Queue sınıfı FIFO (First in First Out) çalışma prensibini ele alır. FIFO ise kuyruğa ilk giren ilk çıkar mantığıdır.

Örnek verecek olursak; bir otobüs durağını düşündüğümüzde sıraya ilk giren kişi otobüse ilk girecek olan kişidir.

Tabi bazı istisnalar buna uymaz 🙂

Queue nesnesini oluşturmak için ihtiyacımıza göre farklı yapıcı metotları kullanabiliriz.

Queue veri yapısında Enqueue(Object), Dequeue() ve Peek() metotları vardır. Bunlardan kısaca bahsedecek olursak.

  • Dequeue() metodu ile kuyruktaki ilk elemanı verir ve kuyruktan o elemanı siler. (Stack sınıfının Pop() metoduna benzer)
  • Enqueue(Object) metodu ile kuyruğun sonuna farklı veri türünden eleman eklenir. Stack sınıfının Push(Object) metoduna benzer
  • Peek() metodu ile kuyruktaki ilk elemanı verir ama kuyruktan o elemanı silmez. (Bu metot hem Stack hem de Queue veri yapısında benzer kullanımdır)

Queue yapısına genel bir bakış. Sırayla 10, 20, 30, 40 sayıları Queue yapısına giriyor ve ilk giren ilk çıkar (FIFO) mantığı ile kuyruk yapısından çıkıyor

Not: Boş bir kuyruk yapısında Dequeue() metodunu kullanarak eleman çıkarmak istersek InvalidOperationException() istisnai durum oluşur

Queue sınıfının bazı özelliklerini ve metotlarını ihtiyacımıza göre kullanabiliriz.

Queue sınıfının metot ve özelliklerine buradan daha detaylı bir şekilde ulaşabilirsiniz.

Queue sınıfı standart bir koleksiyon tabanlı bir sınıf olduğundan GetEnumerator() metodu ile kuyruktaki bütün elemanlara erişeibiliriz. Ya da Queue sınıfının Count özelliğini kullanarak Dequeue() metodu ile elemanlara erişebiliriz.

Queue sınıfının özellikleri ve metotlarını temel düzeyde öğrenmiş olduk. Bu bilgileri pekiştirmek için örnek bir uygulama yapıyor olacağız.

Senaryomuz gişe önünde bilet satın almak isteyen insanların sıra numarasına göre biletlerini satın aldıklarında geçirdikleri zaman. Sıradaki ilk kişi diğer kişileri rahatsız ettiği için sıradan kovulacak. Sıra numarası çift olanlar biletlerini 2 dakika gecikme ile satın alabilecekler, sıra numarası tek olanlar ise biletlerini 3 dk gecikmeli olarak satın alabilecekler. Her bir işlem için ekrana bilgi yazdıracağız.

Örnek uygulama kodunun son hali:

Bu yazımda FIFO (First in First Out) prensibi ile çalışan .Net Platformunda hazır bulunan koleksiyon tabanlı Queue(kuyruk) sınıfı hakkında edindiğim bilgileri paylaşmaya çalıştım. Umarım faydalı olmuştur.

Bir sonraki yazımda LinkedList hakkında edindiğim bilgileri paylaşmaya çalışacağım. Bir sonraki yazımda görüşmek üzere 🙂

Kaynaklar:

Her Yönüyle C# 7.0, Sefer Algan, Pusula Yayincilik

https://docs.microsoft.com/tr-tr/dotnet/api/system.collections.queue?view=netframework-4.8

https://docs.microsoft.com/tr-tr/dotnet/csharp/programming-guide/concepts/collections

Leave a Comment