Home / Veri Yapıları / Stack (Yığın) Veri Yapısı – Dizi ile

Stack (Yığın) Veri Yapısı – Dizi ile

Stack veri yapılarının en ünlü konusudur. Stackler veri tutmak için oluşturulmuş soyut bir veri tipidir. C dili ile oluşturmak için 2 yapı kullanırız. Bunlardan birincisi dizilerdir. Dizileri stack gibi tutmak için özel bir şekilde oluştururuz. Ama önce Stack nedir onu söyleyelim.

Stackler, en son elemanın ilk ulaşılabilir olduğu sistemdir. Yani Last In First Out kuralı geçerlidir. Son giren ilk çıkar. Bilgisayarlarımızda Ctrl + c işlemini Stack’e eleman ekleme işlemi, Ctrl + v işlemini de Stack’in en üstündeki elemanı sorgulamak olduğunu düşünebilirsiniz. En son kopyaladığınız şeyi yapıştırabilmemize daha doğrusu erişebilmemizi sağlayan şey Stack veri yapısıdır.

Temel Stack İşlemleri

Stack üzerinde ekleme işlemi yapabiliriz. Buna Push adı verilir. Eleman çıkarma işlemine ise Pop adı verilmektedir. Stack’in en üstündeki eleman (yani en son eklenmiş eleman) top değişkeninde saklanır, eleman çıkarıldıkça veya eleman eklendikçe top değeri değiştirilir.

Peki dizi ile temel stack işlemleri nasıl yapılmaktadır? Şimdi direkt size kod vereceğim, kod içerisindeki yorum satırlarına bakabilirsiniz.

Temel Stack İşlemleri C Kodu


#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define STACKLIMIT 5

// ************ Muhammed Eminoglu ************
// *********www.algoritmauzmani.com***********
// *********www.muhammedeminoglu.com**********

//Stack veri yapımızı tutacağımız dizi
int stack[STACKLIMIT - 1];
//Stack'in en üzerindeki yani en son eklenmiş elemanını top değişkeninde tutuyoruz
int top = -1;

//Yığının dolu olup olmadığını kontrol eden yardımcı fonksiyon
bool checkFull()
{
    if(top >= STACKLIMIT - 1)
    {
        return true;
    }
    else
    {
        return false;
    }
}

//Yığının boş olup olmadığını kontrol eden yardımcı fonksiyon
bool checkEmpty()
{
    if(top < 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

//Yığına eleman ekleyen fonksiyon
void push(int item)
{
    bool control = checkFull();
    //Eğer yığın dolu değilse
    if(control == false)
    {
    	//top indisini bir artırıyor ve dizinin bu indisine değerimizi atıyoruz
        top = top + 1;
        stack[top] = item;
    }
    //Eğer yığın dolu ise hata mesajı döndürüyoruz
    else
    {
        printf("\nStackoverflow!!! ... ");
    }
}
//Yığından eleman çıkarak fonksiyon
void pop()
{
    bool control = checkEmpty();
    //Eğer yığın boş değilse...
    if(control == false)
    {
    	//top indisini bir azaltıyoruz.
        top = top - 1;
    }
    else
    {
        printf("\n Your Stack is already empty you cant pop anything... ");
    }
}

int peek()
{
    bool control = checkEmpty();
    if(control == true)
    {
        printf("\n There is no item here ...");
        return 0;
    }
    return stack[top];
}

void printStack()
{
    int i;
    printf("\n ************************ \n");
    for( i = 0; i < top + 1; i++)
    {
        printf("%d ", stack[i]);
    }
}

//main menu
int main()
{
    int choise, item;
    int a;
    while(1 == 1)
    {
        printf("\n 1- Push an item");
        printf("\n 2- Pop an item");
        printf("\n 3- Peek (it shows top element of your stack ... ");
        scanf("%d", &choise);

        switch(choise)
        {
            case 1:
                printf("\n Which number do you want to add? ... ");
                scanf("%d", &item);
                push(item);
                printStack();
                break;
            case 2:
                pop();
                printStack();
                break;
            case 3:
                a = peek();
                printf("\n Your Stack's Top element is => %d", a);
                break;
        }
    }
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir