9 - Yığın (Stack) Veri Yapısı
2026
Bir tabak yığını düşünün:
Bu davranış, yığının temel mantığını sezgisel olarak gösterir.
| İşlem | Yığının Durumu (üstten alta) |
|---|---|
| Başlangıç | boş |
push(10) |
10 |
push(20) |
20, 10 |
push(30) |
30, 20, 10 |
pop() |
20, 10 |
push(40) |
40, 20, 10 |
Burada son eklenen elemanın ilk çıkarıldığını doğrudan görüyoruz.
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
struct stackNode {
int veri;
struct stackNode* onceki;
};
typedef struct stackNode* Node;
Node tepe = NULL;tepe, yığının en üst düğümünü gösterir.tepe == NULL olur.onceki alanı eski tepeyi gösterir.tepe, yeni düğüme güncellenir.Yeni eleman her zaman en üste gelir.
tepe, bir önceki düğüme kaydırılır.int peek() {
if (tepe == NULL) {
printf("Hata: Yığın boş! (peek)\n");
return INT_MIN;
}
return tepe->veri;
}
int isEmpty() {
return (tepe == NULL);
}peek, tepede hangi değer olduğunu gösterir ama elemanı çıkarmaz.isEmpty, yapının boş olup olmadığını kontrol eder.INT_MIN NotuINT_MIN döndürüyoruz.INT_MIN tutulmak istenirse, hata durumu ile gerçek veri karışabilir.isFull MeselesiisFull() fonksiyonu yazılmaz.push başarısız olur.int main() {
printf("Başlangıçta boş mu? %s\n", isEmpty() ? "Evet" : "Hayır");
push(10);
push(20);
push(30);
printf("Tepedeki eleman: %d\n", peek());
pop();
printf("Yeni tepe: %d\n", peek());
pop();
pop();
printf("Son durumda boş mu? %s\n", isEmpty() ? "Evet" : "Hayır");
pop(); // Hata: boş yığında pop
peek(); // Hata: boş yığında peek
return 0;
}| İşlem | Karmaşıklık |
|---|---|
push |
O(1) |
pop |
O(1) |
peek |
O(1) |
isEmpty |
O(1) |
top değişkeni son eklenen elemanın indisini gösterir.top = -1 olur.push öncesinde doluluk, pop öncesinde boşluk kontrol edilir.top == MAKS - 1 olduğunda yığın doludur.push denemesi başarısız olur.Yani burada sorun, yığının mantığında değil, ayrılmış kapasitenin dolmuş olmasındadır.
isFull burada anlamlıdır.Her iki yaklaşımda da tepe üzerinden yapılan temel işlemler sabit zamanda yürür.
push, pop, peek, isEmpty, isFull fonksiyonlarını test edin.(), {}, [] parantezlerinin doğru eşleşip eşleşmediğini kontrol eden algoritmayı tasarlayın.INT_MIN dönmek yerine farklı bir hata yönetimi yaklaşımı düşünün.push, pop ve peektir.