3. Queue (Kuyruk)

1. QUEUE VERİ YAPISI

 Queue yani kuyruk ilk giren ilk çıkar (FIRST IN FIRST OUT) mantığıyla çalışan bir veri yapısıdır. Günlük hayatta da çok karşılaştığımız kuyruk yapısını kafanızda canlandırmak için pide kuyruğunu düşünebilirsiniz 🙂 . Pide kuyruğuna ilk giren pidesini ilk alır son giren de sonuncu olarak alır. Kuyruk modeli program tasarımında bir çok yerde kullanılır. Örneğin, iki birim arasında iletişim kanalı, ara bellek/tampon bellek ve öncelik kuyruğu oluşturmada ve daha bir çok yerde kullanılabilir. Queue implementasyonu üç farklı yaklaşım ile yapılabilir.

  • Dizi üzerinde kaydırmalı.
  • Dizi üzerinde çevrimsel.
  • Linked list ile implementasyon.

queue veri yapısı ile ilgili görsel sonucu

Hemen queue kullanım mantığına dair bir kaç örnek verelim. Bilgisayarların bazıları single proccesor’a sahiptir. yani belli bir zamanda sadece bir kullanıcıya hizmet verebilirler. Queue’ye bırakılan girdi , hizmet bekleyen ilk  kullanıcıya gider diğerlerinin hizmetleri de bu şekilde sıralanır ve hizmet bekleyen kullanıcılara sırayla ulaşır. Yazıcılara gönderilen çıktı talepleri DE sırasıyla queue’da toplanır. Ve ilk gönderilen istek ilk olarak bastırılır. ikinci gösterilen ikinci olarak bastırılır bu şekilde  kuyruk yapısıyla devam eder.

2. QUEUE OPERASYONLARI

Queue nin iki temel operasyonu vardır birincisi kuyruğa eleman ekleyen Enqueue ikincisi kuyruktan eleman alan dequeuedir. Şimdi yine kafanızda linked list veri yapısını canlandırın. Birbirini refere eden node’lar. Ana olarak var olan 4 operasyon. Tail’a veri ekleme, tail’dan veri çekme, head’e veri ekleme, headden veri çekme. Queue yapısı linked listin kısıtlı bir versiyonudur. Bir linked list imlementasyonu üzerinden sadece head’ten yani list başından veri ekleme ve tail yani sonran veri çekmeyi aktive edersek aslında direkt queue implementasyonu yapmış oluruz.

Enqueue    —->   InsertAtBack

Dequeue    —->  RemoveFromFront

Bu sebeple, bir queue implementasyonu yaparken ilk yazımda implementasyonunu yaptığım linked liste gönderme yaparak aşağıdaki gibi bir kalıtım yapabiliriz.


  class QueueInheritance : List
  {
     public QueueInheritance() : base("queue")
     { }

     public void Enqueue(object dataValue)
     {
       InsertAtBack(dataValue);
     }

     public object Dequeue()
     {
      return RemoveFromFront();
     }
  }

3. FARKLI QUEUE TİPLERİ

Simple Queue : Şuana kadar anlatılan queue modeli simple queue idi.

Priority(Öncelik) Queue : Her node’un bir öncelik değeri vardır. Kuyruğa giren nodelar ilk giren ilk çıkar mantığıyla yerleşip çıkmak yerine, priority değerine göre yerleşir ve queuedan alınır.

Circular Queue : Son node’u ilk node’u refere eden queue modelidir.

4. FAYDALI SİTELER

https://www.geeksforgeeks.org/queue-data-structure/

https://www.programiz.com/dsa/types-of-queue