3. Queue (Kuyruk)

QUEUE VERİ YAPISI

bu yazimda queue yani kuyruk yapısından bahsedicem ve yine ilk yazım olan linked listlere gönderme yapacağım. Queue yapısının tüm numarası yine verilerin yerleşme ve çıkış
sıralarıyla ilgilidir adı üzerinde kuyruk. Yapıda veriler şöyle sıralanır ilk bir veri queue’ya girer onun arkasına bir veri daha sonra onun arkasına başka bir veri daha
sonrasında veri çekmek istediğimizde ilk koydugumuz veriyi ilk çekeriz yani bu durumda ne olmuş oldu ilk giren ilk çıkmış oldu (first in first out) aynı şekilde son giren de
son çıkıcaktır. Bunun gerçek hayatta bir çok canlandırması mevcuttur. En basitinden girdiğiniz pide kuyruklarını düşünün ilk siz gittiniz ve sırayı oluşturdunuz sonra arkanıza
birisi geldi onun arkasına birisi ve onun arkasına başka birisi geldi. E ilk pideyi kim alıcak yani ilk çekilen veri kim olucak sıradaki ilk kişi yani ilk giren yani siz 🙂

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

queue yapısı da aynı bu şekilde çalışır.

hemen kullanım mantıgına dair bir kaç örnek vereyim.

Bilgisayarlarin bazıları single proccesora 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 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.

Queue nin iki temel operasyonu vardır birincisi kuyruga eleman sokan Enqueue ikincisi kuyruktan eleman alan Dequeuedir. Queue yapısı da linked listin kısıtlı bir versiyonudur.

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();
     }
  }