Skip to content

priority queue, airport control system, ambulance plane(1), war plane(2), passenger plane(3), cargo plane(4)

Notifications You must be signed in to change notification settings

denizkarhan/Airport-control-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Havaalanı Kontrol Sistemi

Öncelikli Kuyruk Yapısına genel bir bakış | (Tolgahan Çepel)

Bilginin geliş sırasına göre, ilk önce gelen elemana ilk erişilen liste yapısına kuyruk (queue) denir. 1_Mtk98BdiSCAIqVG7FnBzLw Bu erişimde First-In-First-Out (FIFO) prensibi vardır. Yani ilk giren eleman, ilk çıkar. Örneğin sinema bileti almak için sıraya girmiş kişileri düşünebiliriz. İlk önce gelen kişi bileti daha önce alacaktır. Queue veri yapısında, verilere iki uçtan erişim vardır. Bir uçtan eleman ekleme (enqueue), diğer uçtan eleman çıkarma (dequeue) işlemleri yapılır. Queue tasarımı dizi veya bağlı liste ile yapılabilir. Bağlı liste kullanarak boyutu sabit olmayan bir queue oluşturabiliriz. Dizi kullanmak için ise sabit bir boyut belirlemeliyiz. Öncelikli Kuyruk (Priority Queue) Bazı problemlerin çözümünde doğrudan kuyruk oluşturamayız. Örneğin uçakların inişi sırasında, acil inmesi gereken uçaklar bulunabilir. Veya muayene sırasında bekleyen hastalar için farklı bir öncelik belirlenebilir. Bu gibi senaryolarda öncelikli kuyruk ile çözüm üretilir. Öncelik sırası belirlenir ve program sırasında uygulanır. UYGULAMA Konuyu daha iyi anlatabilmek için, bağlı liste ile gerçekleştirilmiş bir queue uygulaması anlatacağım. İşlemler: Eleman Ekle (enqueue) Eleman Çıkar (dequeue) Sıradaki Elemanı Getir (peek) Genel anlamda queue (kuyruk) aşağıdaki gibi görünecek. 1_o2xBRxkMaE1R3Yg4_7YhBg front (ön): kuyruğun önündeki elemanı gösteren işaretçi. rear (arka): kuyruğun arkasındaki elemanı gösteren işaretçi

  1. Eleman Ekle (enqueue) Eleman ekleme işlemi için enqueue (kuyruğa eklemek) terimi kulanılır. Enqueue işlemininin kodlarını görelim. 1_yw5wIIT49c493fkIUqYDWw Öncelikle kuyruğun boş olduğu durumunu kontrol etmeliyiz. Eğer kuyruk boş ise (rear elemanı NULL ise) boş bir kuyruğa eleman ekleme işlemi yapacağız. if(rear == NULL) { front = rear = new struct node(); rear->data = key; } Boş bir kuyruğa eleman eklersek enqueue(36); aşağıdaki gibi gözükecektir. 1_e2ffaRs2pXcm9tq9ceo9gQ Eğer kuyruk boş değilse: yeni bir düğüm oluşturmalı ve bu düğümü kuyruğun en arkasına eklemeliyiz. else { struct node* temp = new struct node(); temp->data = key; rear->next = temp; rear = temp; } Düğüm ekleme konusunu anlamakta zorlanıyorsanız, Bağlı Liste (Linked List) konusunu inceleyebilirsiniz. Yalnızca 36 elemanını eklemiştik. Şimdi birkaç ekleme yapalım ve nasıl göründüğünü inceleyelim. enqueue(37); 1_vxtAWRJp1_QNuuCiwPjo3w

enqueue(38); enqueue(39); enqueue(40); 1_XHn16g7gU36bSm3ovFThxQ

  1. Eleman Çıkar (dequeue) Eleman çıkarma işlemi için dequeue (kuyruktan çıkarmak) terimi kulanılır. Dequeue işlemininin kodlarını görelim. 1_NIau_hmIXKlpLRCi2cH1pQ

Öncelikle kuyrukta yalnız bir eleman olduğu durumu kontrol etmeliyiz. Eğer kuyrukta tek eleman varsa (front’un sonraki NULL ise) tek elemanı doğrudan sileceğiz. if(front->next == NULL) { delete front; front = rear = NULL; return; } Bu işlemden sonra, kuyruk boş bir hâle gelecektir. Eğer kuyrukta sadece bir eleman yoksa; en öndeki elemanı temp isminde saklamalı, bir sonraki elemanı yeni front elemanı olarak atamalı, son olarak sakladığımız elemanı silmeliyiz. struct node* temp = front; front = temp->next; delete temp; Örneğin aşağıdaki kuyruktan eleman silelim. 1_XHn16g7gU36bSm3ovFThxQ

dequeue() işlemini uyguladığımızda, tek eleman olmadığı için if bloğuna girmez. struct node* temp = front; 1_MVWUjgW6ZxXA5jvYeynWQA

front = temp->next; 1_lCIR3rTp_SUP4UQsKxALqw

delete temp; 1__DbazQ92Xyh0Pf5k88ylTw

Kuyruğun sol hâli aşağıdaki gibi olacaktır. 1_s1p2sF2uRVMLNLpDddTSJw

Birkaç işlem daha uygulayalım. dequeue(); dequeue(); 1_sH7jxRJD1mlZJ8zSoH3qHw

enqueue(41); enqueue(42); dequeue(); enqueue(43); 1_Toi8b_64_J3r6wmCnWWvdg

  1. Sıradaki Elemanı Getir (peek) 1_sN4RxluLKVhlf8DPclhy_A

Sıradaki eleman, front olarak tuttuğumuz düğüm demektir. Dolayısıyla front düğümünün değerini return ile döndürürsek, silme işlemi uygulamadan sıradaki elemanı elde ederiz. Avantajları: Geliş sırasına göre hizmet verilmesi gereken senaryolarda avantajlıdır. Üretici-tüketici problemlerinde fayda sağlar. Hastanelerde, uçakların inişinde, araç geçişlerinde öncelikli kuyruk kullanılabilir. Dezavantajları: Üzerinde arama yapmak zahmetlidir. En baştan başlanıp ilerlemek gerekir. Kuyruğun aralarına eleman eklemek karmaşıktır. Kullanım Alanları: İşletim sistemlerinde çalışma önceliği kuyruk ile yapılır. Ağ yazıcılarında, belgeler öncelikli kuyruk ile çalışır. Asansör yazılımı kuyruk ile yapılabilir. Sonuç Bu yazımda queue (kuyruk) veri yapısına ve bağlı liste üzerinde uygulamasına değindim. Veri yapısının mantığı anlaşılırsa kolaylıkla dizi ile uygulanabilir.

About

priority queue, airport control system, ambulance plane(1), war plane(2), passenger plane(3), cargo plane(4)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages