বৃহস্পতিবার, ২৫ ফেব্রুয়ারী, ২০২১

Stack

Stack একটি linear data structure. ধরা যাক আমাদের কাছে কিছু plate আছে এবং এই plate গুলোকে আমরা একটির ওপর আরেকটি রেখে একটি স্তম্ভের মতো বানালাম । এখন স্তম্ভ বানানোর সময় আমরা যে plate টিকে সবার আগে নিয়েছিলাম সেটি সবার নিচে আছে, তাই না? হ্যাঁ । আবার যে plate টিকে ২য় বারে নিয়েছিলাম, সেটি নিচের দিক থেকে ২য় স্থানে আছে । এভাবে সর্বশেষ যে plate টি নিয়েছিলাম সেটি সবার উপরে আছে। এখন এই স্তম্ভের ওপর থেকে যদি আমরা একটি একটি করে plate সরিয়ে নেই, তবে সবার শেষে যেটি রেখেছিলাম সেটি আমরা সবার প্রথমে সরিয়ে নিবো, এরপর দ্বিতীয় সর্বশেষ যেটি রেখেছিলাম সেটি এবং এভাবে সবশেষে যেটি সবার প্রথমে রেখেছিলাম সেটি সরিয়ে নিবো । অর্থাৎ পুরো ব্যপারটি যা দাঁড়ালো সেটি হল - Last in, First out. আমরা যেটিকে শেষে রাখবো সেটিকে সবার আগে সরাবো। 

আমাদের stack data structure টি ঠিক একই ভাবে কাজ করে। Stack এ আমরা যে element সবার আগে push করব, pop বা তুলে নেওয়ার সময় ঠিক উপরের মত সেটি সবার পরে বের হবে। 

Stack data structure সম্পর্কিত সমস্যা সমাধানের জন্য আমরা STL এর stack ব্যবহার করব। এখানের যে function গুলা সবথেকে বেশি দরকার হয় সেগুলা হল push(), pop(), top(), size(), empty(). 

push() : push() ব্যবহার করে আমরা stack এর মধ্যে element রাখি। যেমন: আমরা যদি stack এ পর্যায়ক্রমে 10, 15, 3 এই তিনটি integer কে push করি, তবে সবার নিচে 10 এবং সবার উপরে 3 থাকবে যেটা অনেকটা নিচের ছবির মতো -


pop() : pop() ব্যবহার করে আমরা stack থেকে আপাতত সবার উপরে থাকা element কে তুলে নিতে পারি। যেমন উপরের stack এ আপাতত সবার উপরের element টি হল 3. এখন এই stack এর জন্য যদি আমরা pop() call করি, তবে এটি stack থেকে সবার উপরের element কে তুলে নিবে। ফলে stack এর মধ্যে আর দুইটি element অবশিষ্ট থাকবে। ব্যাপারটি আরও ভালো করে বুঝার জন্য আমরা নিচে ছবিটি লক্ষ করি। 



top() : top() ব্যবহার করে আমরা stack এ আপাতত সবার উপরে কোন element টি আছে সেটি জানতে পারব । যেমন আপাতত উপরে stack এ দুইটি element এর মধ্যে সবার উপরে আছে 15. তাই আমরা যদি top() call করি তবে return value হিসেবে আমরা 15 পাবো। এখানে একটি বিষয় লক্ষণীয় top() function টি শুধু সবার উপরের element কে নির্দেশ (indicate) করবে, pop() এর মত তুলে নিবে না, অর্থাৎ top() call করার পর stack এর কোন পরিবর্তন হবে না। 




size() : এই function আমাদের একটি integer value return করবে যেটি নির্দেশ করে আপাতত stack এ কতগুলো element আছে। যেমন আপাতত উপরের stack এ দুইটি element আছে, তাই এর size হবে 2.


empty() : যদি আমাদের stack এ কোন element না থাকে, তবে এই function টি true return করবে, অন্যথায় false return korbe. যেমন আপাতত উপরের stack এ দুইটি element আছে, তাই এর জন্য empty() call করলে return value হিসেবে আমরা false পাবো।


আমরা যদি উপরের ধাপ গুলোর coding implementation করি, তবে যেমন টা হবে :



#include<bits/stdc++.h>


using namespace std;


int main(){

    stack<int>stk;


    stk.push(10);

    stk.push(15);

    stk.push(3);


    stk.pop();


    int Top_element = stk.top();


    int size_of_stack = stk.size();


    bool b = stk.empty();

}








কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন