Veri yapılarının sürekli veriyi nasıl saklayacağımız hakkında olduğunu söyüyoruz. Stack, yani yığınlarda bu veriyi saklama yöntemlerinden bir tanesi. Bu yazımızda stack, dilimizde karşılığıyla yığın veri yapısı konusunu işleyeceğiz.
Yığın Veri Yapısı (Stack) Nedir ?
Stack veri yapısı, LIFO (Last In First Out – Son Giren İlk Çıkar) prensibiyle çalışan bir veri yapısıdır. Bu prensibe göre, stack veri yapısına yeni bir veri eklenirken (push operation), veri stack’in en üstüne eklenir ve veri çekilirken (pop operation) stack’in en üstündeki veri çekilir. Stack veri yapısı, veri ekleme ve çekme işlemlerinin sadece stack’in en üstünde yapılabildiği bir yapıdır.
Stack veri yapısı, birçok veri yapısı algoritmasında ve bilgisayar programlarında kullanılıyor. Örneğin, bir bilgisayar programı çalışırken, çağrılan fonksiyonlar stack üzerinde sırayla yerleştirilir ve işlem tamamlandıktan sonra stack’den pop edilirler.
Stack veri yapısının temel işlemleri şunlardır:
- Push: Stack’e yeni bir veri ekler.
- Pop: Stack’in en üstündeki veriyi çeker ve stack’ten siler.
- Peek: Stack’in en üstündeki veriyi görüntüler, ancak stack’ten silmez.
- IsEmpty: Stack boş mu dolu mu olduğunu kontrol eder.
Stack veri yapısı, yerine göre sabit boyutlu veya büyüyen boyutlu olabilir. Sabit boyutlu stack, önceden belirlenen bir boyuta sahiptir ve eğer stack bu boyuta ulaşırsa, daha fazla veri eklenemez. Büyüyen boyutlu stack ise, gerektiğinde otomatik olarak büyür ve daha fazla veri alabilir.
Stack Veri Yapısı Avantajları
Yığın veri yapısını kullanmanın birçok avantajı vardır. Bunlardan bazıları :
- Hızlı veri ekleme ve çekme işlemleri yapılabilir.
- Stack, LIFO (Last In First Out) prensibiyle çalıştığından, veri çekme işlemleri için sıralama gerekmez.
- Stack, fonksiyon çağrıları gibi, sırayla işlem yapılması gereken durumlarda çok yararlıdır.
Stack Veri Yapısı Dezavantajları
- Stack, veri ekleme ve çekme işlemlerinin sadece stack’in en üstünde yapılabildiği için, stack’ten ortadaki veya alt kısımdaki veriler çekilemez.
- Stack, sadece veri ekleme ve çekme işlemlerini destekler. Bu nedenle, stack’ten veri arama, sıralama gibi işlemler yapılamaz.
- Stack, sabit boyutlu olursa, daha fazla veri ekleyemeyeceği için sınırlıdır. Bu nedenle, stack’in büyüyen boyutlu olması daha uygun olabilir, ancak bu da daha fazla bellek gerektirir.
Stack Veri Yapısı Örnek
Bu örnekte anlamak için C programlama dili kullanacağız. Sizler dilerseniz farklı dillerde de yazabilirsiniz.
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
int stack[MAX_SIZE]; // stack veri yapısı
int top = -1; // stack'in en üstündeki veri
// stack'e veri ekleme işlemi
void push(int value) {
if (top == MAX_SIZE - 1) {
printf("Error: Stack is full.\n");
} else {
top++;
stack[top] = value;
}
}
// stack'ten veri çekme işlemi
int pop() {
if (top == -1) {
printf("Error: Stack is empty.\n");
return -1;
} else {
int value = stack[top];
top--;
return value;
}
}
int main() {
// stack'e 5, 10, 15 değerlerini ekleyelim
push(5);
push(10);
push(15);
// stack'ten veri çekme işlemi yapalım
int value = pop();
printf("Pop işlemi yapıdı: %d\n", value); // Çıktı : 15
value = pop();
printf("Pop işlemi yapıdı: %d\n", value); // Çıktı : 10
value = pop();
printf("Pop işlemi yapıdı: %d\n", value); // Çıktı : 5
return 0;
}
Bu örnekte, stack veri yapısı oluşturulduktan sonra, push işlemiyle stack’e 5, 10 ve 15 değerleri eklenmiştir. Daha sonra pop işlemiyle stack’ten sırasıyla 15, 10 ve 5 değerleri çekilmiştir.
Not: Bu örnekte stack veri yapısı sabit boyutlu olarak tasarladık ve MAX_SIZE değişkeniyle sınırladık. Bu nedenle, stack dolu olduğunda push işlemi yapılamaz ve stack boş olduğunda pop işlemi yapılamaz. Bu durumlarda hata mesajı verilmiştir. Eğer stack’in büyüyen boyutlu olmasını isterseniz, stack’in boyutunu dinamik olarak büyütebilir ve MAX_SIZE değişkenini kullanmayabilirsiniz.
Bu yazımızda stack, dilimizde karşılığıyla yığın veri yapısı konusunu işledik ve birde örnek ile pekiştirdik. Diğer veri yapıları konulu yazılarımızıda okumak isterseniz buradan tümüne ulaşabilirsiniz.