Eleman ekleme ve çıkarma işlemlerini array’in sadece bir ucundan yapabildiğimiz veri yapılarına stack denir. Stack LIFO(last-in-first-out) kuralıyla çalışır ve ara elemanlara erişime izin vermez. Dizi veri yapısında bir elemana ulaşmak istendiğinde indis numarasını kullanarak erişim sağlanıyordu. Stack veri yapısında bir veriye ulaşmak için bir sıraya uymak zorundayız.

      Aşağıdaki örnekte array kullanarak stack ile ilgili temel işlemleri yaptım. top_of_stack değişkeni array’ın en üstündeki elemanın sırasını ifade ediyor. array’a eleman ekleneceğinde bu değişken artırılıyor. array’dan eleman çıkarılacağında bu değişken azaltılıyor. Aynı zamanda bu değişken ile o an dizinin boş ya da dolu olup olmadığı kontrol ediliyor.

#include<iostream>

#define SIZE 10

using namespace std;

class Stack{
public: 
    int elements[SIZE];
    int top_of_stack;
    Stack();
    int empty();
    int full();
    int push(int);
    int pop();
    void display();

};



Stack::Stack(){
    top_of_stack=-1;

}

int Stack::empty(){
    if(top_of_stack==-1)
    return 1;
    else
    return 0;
}

int Stack::full(){
    if(top_of_stack==(SIZE-1))
    return 1;
    else
    return 0;
}

int Stack::push(int element){
    if(full())
    {
        cout << "Stack dolu" << endl;
        return 0;
    }
    else
    {
        top_of_stack++;
        elements[top_of_stack] = element;
    }
}

int Stack::pop(){
     if(empty())
    {
        cout << "Stack boş" << endl;
        return 0;
    }
    else
    {
        top_of_stack--;
        
    }
    
}

void Stack::display(){
    for(int i=0;i<top_of_stack+1;i++)
        cout << "İçerideki "<< i << ". eleman :"  << elements[i]  << endl;

}



int main()
{
    Stack stack1;
    stack1.push(5);
    stack1.push(7);
    stack1.push(3);
    stack1.display();
    cout << "**********************" << endl;
    stack1.pop();
    stack1.display();
    cout << "**********************" << endl;
    stack1.push(19);
    stack1.display();
    cout << "**********************" << endl;
    int option;
    cout << endl << endl << endl;
    while(cout << "push=1, pop=2, display=3 giriniz." << endl && cin>>option)
    {
    
        if(option==1)
            {
                int push_value;
                cout << "Eklenecek değer ? = " ;
                cin >> push_value;
                stack1.push(push_value);                    
        }
        else if(option==2)
            {
                stack1.pop();
        }
        else if(option==3)
            {
                stack1.display();
                cout << "**********************" << endl;
        }
}}