Veri yapıları, bilgisayar biliminin temel taşlarından biridir ve verilerin düzenlenmesi, depolanması ve yönetilmesi için kullanılan özel formatlardır. Doğru veri yapısını seçmek, bir algoritmanın verimliliğini ve performansını önemli ölçüde etkileyebilir. Bu makalede, en temel ve yaygın kullanılan veri yapılarından biri olan yığınları (stacks) derinlemesine inceleyeceğiz. Yığınların ne olduğunu, nasıl çalıştığını, hangi prensiplere dayandığını ve gerçek dünya uygulamalarını örneklerle açıklayacağız.
Yığın, doğrusal bir veri yapısıdır ve "Son Giren İlk Çıkar" (Last-In, First-Out - LIFO) prensibine göre çalışır. Bu prensip, yığına en son eklenen elemanın, yığından ilk çıkarılacak eleman olduğu anlamına gelir. Günlük hayattan bir örnek vermek gerekirse, üst üste dizilmiş tabakları düşünebiliriz. En üste konulan tabağı ilk önce alırsınız.
Yığın veri yapısında genellikle iki temel işlem bulunur:
Bu iki temel işlemin yanı sıra, yığınlarda sıklıkla kullanılan başka işlemler de vardır:
LIFO prensibi, yığının çalışma mantığının temelini oluşturur. Bu prensibe göre, yığına eklenen son eleman, yığından çıkarılan ilk eleman olur. Bir eleman yığına eklendiğinde, yığının en üstüne yerleşir ve diğer elemanların üzerine çıkar. Bir eleman yığından çıkarıldığında ise, yığının en üstündeki eleman çıkarılır ve alttaki elemanlar bir üst konuma gelir.
Bu prensibi daha iyi anlamak için bir örnek düşünelim: Bir yığına sırasıyla A, B ve C elemanlarını ekleyelim. Yığın şu şekilde görünecektir:
C (En Üst)BA (En Alt)
Şimdi yığından bir eleman çıkaralım (pop işlemi). Çıkarılacak eleman, en üstteki eleman olan C olacaktır. Yığın şu şekilde görünecektir:
B (En Üst)A (En Alt)
Bu örnek, LIFO prensibinin nasıl çalıştığını açıkça göstermektedir.
Yığınlar, bilgisayar biliminde birçok farklı alanda yaygın olarak kullanılır. İşte yığınların en önemli uygulama alanlarından bazıları:
Yığın veri yapısının bazı avantajları ve dezavantajları şunlardır:
Aşağıdaki Python kodu, bir yığın veri yapısının basit bir uygulamasını göstermektedir:
class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): if not self.is_empty(): return self.items.pop() else: return None # veya bir hata fırlatılabilir def peek(self): if not self.is_empty(): return self.items[-1] else: return None def is_empty(self): return len(self.items) == 0 def size(self): return len(self.items)# Örnek Kullanımstack = Stack()stack.push(10)stack.push(20)stack.push(30)print("Yığın Boyutu:", stack.size()) # Output: Yığın Boyutu: 3print("En Üstteki Eleman:", stack.peek()) # Output: En Üstteki Eleman: 30print("Çıkarılan Eleman:", stack.pop()) # Output: Çıkarılan Eleman: 30print("Yığın Boyutu:", stack.size()) # Output: Yığın Boyutu: 2Yığınlar, bilgisayar biliminde önemli bir yere sahip olan temel bir veri yapısıdır. LIFO prensibiyle çalışmaları, birçok farklı problem için etkili çözümler sunmalarını sağlar. Fonksiyon çağrılarından ifade değerlendirmesine, geri alma işlemlerinden derleyici tasarımına kadar geniş bir uygulama yelpazesine sahiptirler. Bu makalede, yığınların ne olduğunu, nasıl çalıştığını, hangi prensiplere dayandığını ve gerçek dünya uygulamalarını örneklerle açıkladık. Umarım bu bilgiler, yığın veri yapısını daha iyi anlamanıza ve uygulamalarınızda kullanmanıza yardımcı olur.