PDF hazırlanıyor...

Veri Yapıları 3

Yazar: Tuğba Karataş
Tarih: 28 Eylül 2025

Veri yapıları serimize, doğrusal veri yapı türleri olan stack (yığın) ve queue (kuyruk) yapıları ile devam ediyoruz.

Stack  ve Queue Görsel

STACK

Stack (Yığın) veri yapısı, bilgisayar bilimlerinin en temel ve yaygın kullanılan soyut veri yapılarından (Abstract Data Type - ADT) biridir. Verileri sıralı bir şekilde depolayan ve sadece bir ucundan (tepe noktası-Top) ekleme ve çıkarma yapabildiğimiz bir yapıdır.

 

Stack'in Temel Prensibi : LIFO (Last In First Out- Son Giren İlk Çıkar)

Stack veri yapısının çalışma prensibini anlatırken çok yaygın bir örnek kullanılır: üst üste dizilmiş tabaklar. Bu örnekte bir tabak yığınına yeni tabak eklemek istersek en üste koyarız veya bu yığından bir tabak almak istersek yine en üst noktadan alırız.

LIFO Mantığı Görsel

Stack de bu mantığa göre çalışır ve buna LIFO (Last-In, First-Out) prensibi denir. LIFO (Last-In, First-Out): Son giren, ilk çıkar. Yani, yığına en son eklenen öğe, yığından ilk çıkarılacak öğedir. Özetle yığında sadece son elemana (top) erişebiliriz ve ekleme- çıkarma işlemleri buradan yapılır.

 

Stack Üzerindeki Temel Operasyonlar

Stack veri yapısının işlevselliği, genellikle sabit bir dizi (array) veya dinamik bir bağlı liste (linked list) kullanılarak gerçekleştirilen birkaç temel işlemle tanımlanır.

  • push() fonksiyonu: Stack veri yapısına veri ekleme için kullanılır.
  • pop() fonksiyonu: Stack'ten veri çıkartma yapar.
  • peek() fonksiyonu: Yığının en üstte kalan elemanını döndürür yani hangi elemanın çıkarılacağını söyler.
  • clear() fonksiyonu: Yığındaki tüm elemanları temizlemeyi sağlar.

! Bu fonksiyon isimleri kullanılan programlama diline göre farklılık gösterebilir.

! Yığında eleman yokken pop() fonksiyonunu çağırmak underflow (yığın eksilmesi) hatası verebilir.

! Sabit boyutlu bir yığına (dizi ile oluşturulmuş) kapasitesinin üzerinde bir öğe eklemeye çalışmak ise overflow (yığın taşması) hatası verebilir.

Pop ve Push Fonksiyonları Görsel

 

Stack Uygulama Yöntemleri

Stack veri yapısını uygulamanın iki yöntemi vardır.

1. Diziler Kullanarak

  • Avantajları: Basit ve daha hızlı erişim.

  • Dezavantajları: Boyutu sabittir. Stack Overflow riski vardır ve  dizi boyutu önceden belirlenmelidir.

  • Uygulama: Bir dizi ve top (tepe) adı verilen, son eklenen öğenin dizinini tutan bir değişken kullanılır. push() işleminde top artırılır, pop() işleminde top azaltılır.

 

2. Linked List Kullanarak

  • Avantajları: Boyutu dinamiktir, ihtiyaç duydukça büyüyebilir ve küçülebilir (Stack Overflow riski bellek dolana kadar yoktur).

  • Dezavantajları: Diziye göre her düğüm (node) için ek bellek gerektirir.

  • Uygulama: Bağlı listenin başlangıcı (Head), stack'in tepe noktası olarak kullanılır. Yeni bir düğüm eklenirken (push()), bu düğüm listenin başına (yeni tepe) eklenir. Bir düğüm çıkarılırken (pop()), baştaki düğüm çıkarılır.

 

QUEUE

Queue veri yapısı, aynı stack gibi en temel ve en yayhın kullanılan veri yapısıdır. Çalışma prensibi ise günlük hayatta girdiğimiz ekmek sırası, yemek sırası gibi sıraya girmeye benzer. Queue, stack'in aksine her iki uçtan işlem yapar ve FIFO mantığına göre çalışır.

 

Queue'nin Temel Prensibi : FIFO (First In First Out- İlk Giren İlk Çıkar)

Queue'nun çalışma mantığı, bir banka şubesindeki sıra veya bir otobüs durağındaki kuyruk ile tamamen aynıdır. İlk gelen, hizmeti alır ve sıradan ayrılır. Yani ilk giren ilk çıkar.

FIFO mantığı ile Queue Görsel

Queue, bu prensibe göre çalışır ve buna FIFO (First-In, First-Out) prensibi denir. FIFO (First-In, First-Out): İlk giren, ilk çıkar. Yani, kuyruğa ilk eklenen öğe, kuyruktan ilk çıkarılacak öğedir.

 

Queue'nin Temel Operasyonları

Queue veri yapısı işlemlerini gerçekleştirmek için bazı fonksiyonları kullanırız.

  • EnQueue() fonksiyonu: Sıra sonuna ekleme yapar.
  • DeQueue() fonksiyonu: Sıranın başından çıkarma yapar.
  • isEmpty() fonksiyonu: Sıranın boş olup olmadığını kontrol eder ve olası hataların önüne geçmeyi amaçlar. 
  • front() fonksiyonu: Sıranın en başında bulunan elemanın bilgisini verir.

! Bu fonksiyon isimleri kullanılan programlama diline göre farklılık gösterebilir.

! Tüm bu temel işlemler (Enqueue, Dequeue, Peek) genellikle O(1) zaman karmaşıklığına sahiptir, yani eleman sayısından bağımsız olarak çok hızlıdır.

 

Kuyruk Çeşitleri

Basit kuyruk (Simple Queue) en temeli olsa da, ihtiyaca göre farklı kuyruk türleri kullanılır:

  1. Dairesel Kuyruk (Circular Queue): Dizi ile kuyruk uygulandığında, dizinin başında boşalan yerlerin tekrar kullanılması için kuyruğun sonu başıyla birleştirilmiş gibi çalışır. Bu, bellek israfını önler.

  2.  
  3. Öncelikli Kuyruk (Priority Queue): FIFO prensibini izlemek yerine, her öğenin bir önceliği vardır. Çıkarma (Dequeue) işlemi, kuyrukta en yüksek önceliğe sahip öğe üzerinden yapılır (Örneğin: Hastane acil servisindeki hastalar önecliğe göre tedavi görür).

  4.  
  5. Çift Uçlu Kuyruk (Deque / Double-Ended Queue): Ekleme ve çıkarma işlemlerinin kuyruğun hem önünden hem de arkasından yapılmasına izin veren daha esnek bir yapıdır.

 

Queue Veri Yapısı Kullanım Alanları

İşletim sisteminde CPU zamanlama (CPU Scheduling) başta olmak üzere ilerleyen zamanlarda göreceğimiz Genişlik Öncelikli Arama (Breadth-First Search - BFS) algoritmasında ve pek çok alanda kullanılır.

Queue, basitliği ve verimliliği sayesinde (temel operasyonların O(1) olması), programlamada veri akışını yönetmek için vazgeçilmez bir yapıdır.

Stack  ve Queue Görsel

Böylece stack ve queue veri yapılarını detaylı ele aldık. Bir sonraki yazılarımızda görüşmek üzere.

Veri Yapıları 1 adlı yazımıza ulaşmak için tıklayın..

Veri Yapıları 2 adlı yazımıza ulaşmak için tıklayın..

Etiketler

Veri Yapıları Stack Queue