স্ট্যাক (Stack) এক ধরণের অ্যাবস্ট্রাক্ট (abstract) ডাটা টাইপ। স্ট্যাকে তথ্যগুলো এক ধরণের ক্রমিক লিস্ট আকারে সংরক্ষিত থাকে এবং প্রধান অপারেশন গুলো যেমন কোন উপাদান ডিলিট বা যুক্ত করা এর এক প্রান্তে (top) হয়ে থাকে। এজন্য একে লাস্ট ইন ফার্স্ট আউট (Last in First Out) বা লিফো (LIFO) বলা হয়ে থাকে।

স্ট্যাক, খুবই সাধারন একটা ধারনা এবং এর অর্থ সরাসরি অনুবাদের মধ্যেই পাওয়া যায়। Stack অর্থ ‘স্তুপ’। অর্থাৎ ডাটাগুলো স্তুপাকারে সংরক্ষিত থাকবে। ধরা যাক আপনি কোন রেস্তোরায় খেতে গেছেন। আপনাকে একটা প্লেট নিতে বলা হল। তাহলে সাধারনত যেখানে প্লেটগুলো সাজানো আছে তার উপর থেকেই একটি প্লেট আপনি নিবেন। আবার যদি কোন কর্মী পেল্টগুলো পরিষ্কার করে এনে রাখে তাহলে সেও কিন্তু উপরেই রাখবে। কম্পিউটার বিজ্ঞানের স্ট্যাকের ধারনাটাও কিন্তু একই।

স্ট্যাকের মূল অপারেশন হল –

create(max_stack_size)

নতুন কোন একটা স্ট্যাক তৈরি করা।

isFull(stack, max_stack_size)

স্ট্যাকটা পূর্ণ কিনা সেটা যাচাই করা। অনেকেই প্রশ্ন করতে পারেন যে স্ট্যাক পূর্ণ কিনা সেটা যাচাই করার কি দরকার? দরকয়ার আছে। কারণ স্ট্যাক তো কম্পিউটারের মেমরিতে সংরক্ষণ করতে হবে, আর যেহেতু মেমরি অসীম না, তাই যাচাই এর প্রয়োজন আছে।

push(stack, item)

স্ট্যাকে কোন ভ্যালু প্রবেশ (insert) বা যুক্ত করানোর জন্য।

isEmpty(stack)

স্ট্যাকে কোন ভ্যারিয়েবল আছে কিনা সেটা যাচাই করার জন্য।

pop(stack,item)

স্ট্যাক থেকে কোন ভ্যালু মুছে (delete) ফেলার জন্য।

সি++ ব্যবহার করে পুশ(push) ও পপ(pop):

/******************************************************************************

Author: Md. Shahinur Alam
Description: This Program is to demonstrate create, display, push and pop operation in C++

*******************************************************************************/
#include <iostream>
#define MAX_STACK_SIZE 50

using namespace std;

int ourstack[MAX_STACK_SIZE],top=0;

// This function is to push in stack
int pushinstack(int item) 
{
    if(top>MAX_STACK_SIZE-1)
    {
        cout<<"\nStack is full";
    }
    else
    {
        ourstack[top]=item;
        top++;
    }
}

// This function is to display all values in stack
int displaystack() 
{
    if(top>0)
    {
        cout<<"\nValues in stack: ";
        for(int i=0;i<top;i++)
        {
            cout<<ourstack[i]<<" ";
        }
    }
    else
    cout<<"\nThere is no value in stack";
}

// This function is to pop from stack
void popfromstack() 
{
    if(top<0)
    {
        cout<<"\nStack is Empty";
    }
    else
    {
        cout<<"\npopped : "<<ourstack[top-1];
        top--;
    }
}

int main()
{
    
    displaystack();
    
    pushinstack(5);
    pushinstack(10);
    pushinstack(15);
    pushinstack(20);
    
    displaystack();
    
    popfromstack();
    
    displaystack();
    
    return 0;
}