ধর তোমার প্রাইমারি স্কুলের টিচার ক্লাসওয়ার্ক চেক করছেন উনার টেবিলে বসে বসে। তার কাছে এখন অনেক গুলো খাতা আছে-একটার উপর আরেকটা সাজানো। এখন তিনি খাতা কাটা শুরু করলে কোনটি থেকে শুরু করবেন? অবশ্যই সবার উপরে যেটা আছে সেটা থেকে।

এখন কেউ যদি তার কাছে আরেকটি খাতা নিয়ে যায়, তাহলে সেটি তিনি কোথায় রাখবেন? সবগুলো খাতার উপর।

এই পুরো ব্যাপারটাকেই সিমুলেট করে স্ট্যাক ডাটা স্ট্রাকচার দিয়ে। স্ট্যাকের মূল ধারণা হল, যখনই নতুন কোনো ডাটা দেওয়া হবে, সেটি স্ট্যাকে সবার উপরে গিয়ে জমা হবে। আবার স্ট্যাকে প্রসেসিং-ও চলবে সবার উপরের ডাটাটা  দিয়ে। অর্থাৎ, স্ট্যাকে সবার শেষে যেটা আসছে, তার কাজ হচ্ছে সবার আগে। এটাকে বলে “Last In First Out.” আহা আমাদের লাইনে দাঁড়ানোর সময় ব্যাপারটা এমন হলে কত ভাল হত! 😉

স্ট্যাক ডিক্লারেশন

স্ট্যাক ডিক্লেয়ার করতে হয় ভেক্টরের মতই।

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack <int> myStack;
    return 0;
}

 স্ট্যাকে ভ্যারিয়েবল পাস করার জন্য myStack.push(num)

স্ট্যাকের বাকি কাজগুলোও ভেক্টরের মতই। যেমন আমরা ইউজার থেকে ১০ টা ইনপুট নিয়ে স্ট্যাক তৈরির জন্য লিখতে পারিঃ

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack <int> myStack;
    int i, input;
    for (i=0; i<10; i++) {
        cin >> input;
        myStack.push(input);
    }
    return 0;
}

 স্ট্যাকটা খালি কি না চেক করতে হয় myStack.empty() দিয়ে

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack <int> myStack;
    int i, input;
    for (i=0; i<10; i++) {
        cin >> input;
        myStack.push(input);
    }
    if (myStack.empty()) {
        cout << "Empty Stack\n";
    }
    return 0;
}

সবার উপরের উপাদানটা এক্সেস করতে myStack.top() 

আমরা যদি স্ট্যাকের সবচেয়ে উপরের উপাদানটা প্রিন্ট করে দিতে চাই, তাহলে লিখবোঃ

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack <int> myStack;
    int i, input;
    for (i=0; i<10; i++) {
        cin >> input;
        myStack.push(input);
    }
    int num = myStack.top();
    cout << "Element on the top: " << num << endl;
    return 0;
}

এই কোড রান করে ১ থেকে ১০ ইনপুট দিলে আউটপুট হবে নিচের মতঃ

Snap 2015-06-05 at 22.20.26

বুঝতেই পারছো, যেটা সবার শেষে দেওয়া হয়েছিল সেটাই আছে সবার উপরে!

কাজ শেষে স্ট্যাক থেকে কোনো উপাদান সরিয়ে দিতে myStack.pop()

আমরা যদি সব উপাদান প্রিন্ট করে তারপর বের করে দিতে চাই, তাহলে লিখবোঃ

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack <int> myStack;
    int i, input;
    for (i=0; i<10; i++) {
        cin >> input;
        myStack.push(input);
    }
    cout << "The integers given by are as follows." << endl << endl;
    while (!myStack.empty()) {
        cout << myStack.top() << endl;
        myStack.pop();
    }
    return 0;
}

এইটা রান করে ১ থেকে ১০ পর্যন্ত ইনপুট দিলে আউটপুট আসবে নিচের মতঃ

Snap 2015-06-05 at 22.23.07

এটা দেখার পর স্ট্যাক সম্পর্কে ধারণা আরও ভাল হওয়ার কথা! দেখতেই পাচ্ছ, যেটা সবার শেষে এসেছে, তার কাজ হয়েছে সবার আগে!

আজকের মত এখানেই শেষ। আগামী পর্বে আমরা শিখবো কিউ সম্পর্কে। ততদিন পর্যন্ত ভাল থাকবেন, সুস্থ থাকবেন! 😀

Muntasir Wahed

Muntasir Wahed

System Administrator at স্বশিক্ষা.com
Jack of all trades, master of none.
Muntasir Wahed
Muntasir Wahed