Swift ile Veri Yapıları — Queue

cemal tüysüz
3 min readOct 23, 2022
freepik.com

Herkese selamlar, bu yazıda Queue (Kuyruk) veri yapısından bahsedeceğim. Yazının akışında Queue yapısının çalışma mantığı, günlük hayatta bazı kullanım alanları ve swift ile beraber bu yapının oluşturulması gibi konuları bulabilirsiniz. Keyifli okumalar dilerim :)

Queue

Queue yapısı doğrusal olup ilk giren ilk çıkar (First In First Out) mantığı ile çalışmaktadır. Bu mantığa bir örnek verelim;

Havaalanında aynı uçuşu bekleyen yolcuların çıkış kapısı önünde kimlik kontrolü için bir kuyruk oluşturduğunu düşünelim. Kuyruğun en önünde kimliği ilk kontrol edilecek kişi (sıraya ilk giren) aynı zamanda kuyruktan ilk ayrılacak olan kişidir. Tam tersi ise kuyruğa en son giren kişi de kimliği en son kontrol edileceği için kuyruktan en son ayrılacak olan kişidir.

Queue yapısında temelde 3 farklı fonksiyon bulunur. ENQUEUE kuyruk yapısında yeni bir veri eklerken DEQUEUE kuyruktan veri çıkartmak için kullanılır. PEEK ise kuyruğun en önünde yer alan veriyi getirir.

Günlük Hayatta Kullanım — Listeler

Swift ile bu yapıyı oluşturmadan evvel bu yapının günlük hayatta programlama çerçevesinde nerelerde kullanıldığına bir göz atalım.

iOS veya Android platformlarında bir liste oluştururken, Android’de RecyclerView, iOS tarafında TableView yada CollectionView yapılarını ihtiyaçlarınıza göre tercih edebilirsiniz.

Bu listeleme yapıları farklı dilde farklı özelliklere sahip olabilirler lakin çalışma mekanizmaları ortaktır. Her biri kuyruk yapısı ile çalışmaktadır. Bunu açıklayalım.

Bazen listemizde göstermek istediğimiz veriler çok uzun olabiliyor. Bu durumda performans ve bellek tüketimleri de hesaba katılarak her bir veri için çalışma zamanında bir hücre üretilmiyor. Belirli bir sayıda hücre üretilir ve bu hücreler bir kuyruk ile yönetilir.

Kullanıcı, listeleme ekranında daha fazla veri görmek istedi ve kaydırmaya başladı. Bu durumda yeni bir hücre ilk defa oluşturulmuş gibi aşağıdan yukarıya doğru çıkıyorken en yukarıda olan hücre ekranın dışına doğru çıktığında dışarıda kalıyor veya destroy ediliyor gibi görülebilir lakin durum tam olarak böyle değildir.

Kullanıcı ekranı kaydırıyor olduğunda kuyruğun en önündeki hücre (listede o an yukarıda görünen ilk eleman denilebilir) ekrandan ayrıldığında yok edilmeden tekrardan kuyruğun sonuna eklenir. Sadece göstereceği veri setini değiştirerek yeni bir hücre imajını sergileyebilir.

Böylelikle iyi bir performans elde etmek ile beraber memory management sağlanmış olur.

Swift ile Queue Yapısını Oluşturalım

Öncelikle verileri manage edecek olan Queue generic sınıfımızı oluşturalım.

Queue yapısının mantığını bozmaması ve bize kendi yöntemleri sayesinde yardımcı olması sebebi ile verileri bir array içerisinde tutacağız. Queue yapısının fonksiyonları (peek, enqueue, dequeue vb.) haricinde başka yöntemlerin array e direkt erişilerek kullanılmasını önlemek amacı ile array e ait access modifier private olarak verildi.

isEmpty ise kuyrukta bir değer olup olmadığını öğrenmemizi sağlayacak.

Peek & Enqueue & Dequeue

Queue yapısının temel halini oluşturmak bir hayli basit ve kısa olduğundan yöntemlerimizi tek bir kod bloğu halinde yazıya ekledim. Aşağıdaki kod bloğunu inceleyelim.

Peek ile beraber kuyruğun en önündeki yani array yapısında yer alan ilk elemanı getiriyoruz. Enqueue ile beraber kuyruğun en sonuna yeni bir eleman ekliyoruz ve dequeue ile kuyruğumuzun en önünde yer alan elemanı kuyruktan çıkartıyoruz.

Kuyruk yapısının temelini oluşturmak aslında gördüğünüz gibi çok basit. Burada önemli olan ihtiyaçları tespit edip bu yapıyı duruma göre düzenleyebilmekte.

Şimdi de yapımızı çalıştıralım.

Umarım faydalı bir yazı olmuştur. Bir başka yazı da görüşmek üzere, kendinize iyi bakın.

--

--