Stack (Yığın) | Veri Yapıları

Stack, Türkçe karşılığı ile yığın, programlama alanında oldukça kullanışlı olan temel veri yapısıdır. Yığın kelimesinden anlaşılacağı üzere üst üste yığmaktan oluşan yapılardır. Örnek olarak bir ucu kapalı silindir olsun, bu silindir içine ise belli miktarda 1 lira bozukluk eklediğimizi hayal edelim. İşte bu örnek aslında stack veri yapısına benzetilebilecek en iyi örneklerden bir tanesidir. Eğer ilk eklediğimiz bozuk parayı çıkartmak istersek tüm eklenen bozuk paraları çıkartmamız gerek. Buradan çıkartacağımız sonuç stack yapısının Son Giren İlk Çıkar (LIFO - "Last In First Out") prensibine sahip olduğudur.

Stack yapısı üzerinde uygulanan işlemleri aşağıdaki resim üzerinde inceleyelim.
Stack Yapısı Örneği
LIFO prensibine uygun olarak ekleme, çıkarma işlemlerinin yapılmış olduğu görülüyor. Yığın yapısına ilk eklenen eleman 1, daha sonra eklenen eleman ise 2. Elemanları çıkartmak istersek ilk çıkan eleman 2 olacaktır, en son çıkan eleman ise 1 elemanıdır.

Stack veri yapısında genel olarak kullanılan beş tane temel fonksiyon vardır:

  • StackOlustur: Boş elemanlı stack oluşturur.
  • ekle(push): Yığına eleman ekler.
  • cikar(pop): Yığından eleman çıkarır.
  • BosMu: Yığın eğer boş ise kontrol et.
  • DoluMu: Yığın eğer dolu ise kontrol et.
  • StackListele: Yığın elemanlarını listele.


C++ dili yazılan stack yapısının program kodu:
#include <iostream>

#define BOYUT 100

using namespace std;

class Stack{
    private:
       int BAS;
       int elemanlar[BOYUT];
  
    public:
       Stack(){}
       ~Stack(){}
  
       void stackOlustur(){
           this->BAS = -1;
       }
  
       int bosMu(){
           if(this->BAS == -1)
                 return 1;
           else
                 return 0;
       }
  
       int doluMu(){
           if(this->BAS == BOYUT-1)
                 return 1;
           else
                 return 0;
       }
  
       void ekle(){
           int yeniEleman;
           cout << "Yeni eleman ekle: ";
           cin >> yeniEleman;
           if(doluMu()){
                cout << "Stack dolu, eleman eklenemez!" << endl;
           }
           else{
                this->BAS++;
                this->elemanlar[this->BAS] = yeniEleman;
           }
       }
  
       void cikar(){
           if(bosMu()){
                cout << "Stack bos, eleman cikarilamaz!" << endl;
           }
           else{
                cout << this->elemanlar[this->BAS] << " elemani silindi!";
                this->BAS--;
           }
           cout << endl;
       }
  
       void stackListele(){
           if(bosMu()){
                cout << "Stack bos!" << endl;
           }else{
                for(int i=0; i<=this->BAS; i++){
                     cout << elemanlar[i];
                     if(i<this->BAS)
                           cout << "-";
                }
                cout << endl;
           }
        }
};

int main(){
        Stack *yigin = new Stack();
        yigin->stackOlustur();
        yigin->ekle();
        yigin->ekle();
        yigin->ekle();
        yigin->stackListele();
        yigin->cikar();
        yigin->stackListele();
        yigin->cikar();
        yigin->cikar();
        yigin->cikar();
        yigin->stackListele();
        delete yigin;
}

Hiç yorum yok:

Yorum Gönderme