Programming is all about data manipulation. Data structure is way of storing data for further manipulation.
ডাটা স্ট্রাকচার আমাদেরকে বিভিন্ন ডাটা সাজিয়ে রাখার ব্যবস্থা করে দেয়। ডাটা সাজিয়ে রাখার অনেক গুলো "তরিকা" আছে। কোনকিছু আমরা কেন সাজিয়ে রাখি? যেন পরে নির্দিষ্ট একটা ডাটা সহজে খুঁজে পেতে পারি। "তরিকা" গুলোর নাম Array, Stack, Queue, Linked List, Tree, Graph.
এগুলা শ খানেক ডাটা স্ট্রাকচারের মধ্যে কিছুর নাম, যেগুলো অনেক বেশি ব্যবহার হয়।
এই পোস্টটা স্ট্যাক বুঝানোর জন্য।
স্ট্যাক খুবই ইন্টেরেস্টিং একটা ডাটা স্ট্রাকচার। অনেক কারনেই এটা ব্যাবহার হয়। আগে স্ট্যাক কনসেপ্টটা নিয়ে আলোচনা করা যাক। স্ট্যাক বলতে বোঝায় একটার উপর একটা সাজায়ে রাখা। বিয়ের বাড়িতে আগে মেলামাইনের গ্লাস দেখা যেত একটার ভেতর আরেকটা ঢুকায়ে লম্বা একটা পাইল তৈরি করে একসাথে ক্যারি করা হচ্ছে। এটা একটা স্ট্যাক। প্রোগ্রামিং এর ভাষায় স্ট্যাক এক্সাক্টলি সেইম জিনিসই। তবে একটু ঘষামাজা আছে। আরেকটা উদাহরণ দেয়া যেতে পারে। বয়ামের ভেতর একটার পর আরেকটা বিস্কিট ঢুকিয়ে রাখা হয়। হ্যা, এইটা পারফেক্ট উদাহরণ হয়েছে।
এই বিস্কিট ভর্তি বয়ামের মধ্যে লক্ষণীয় একটা বিষয় আছে। যেই বিস্কিট সবার আগে ঢুকানো হয়েছিলো সেটা সবার পরে বের হবে। যেটা সবার পরে ঢুকেছিলো সেটা সবার আগে বের হবে। এই কনসেপ্টটাকে বলে Last In First Out (LIFO)। প্রোগ্রামিং এর স্ট্যাক ডাটা স্ট্রাকচারও এই LIFO কেই ফলো করে।
স্ট্যাক আমরা বানাই সাধারনত সেই আগের Array দিয়েই (হ্যা এই Array সারাজীবন থাকবে 😄) । একটা একটা করে ডাটা Array তে ঢুকাই আবার পরে দরকারে বের করে আনা যায়। কিন্তু মনে রাখতে হবে যেটা সবার আগে ঢুকাবো সেটা সবার পরে বের হবে।
PUSH: স্ট্যাকে ডাটা ঢুকানোকে পুশ করা বলে। কিছু কিছু প্রোগ্রামিং ল্যাংগুয়েজে আলাদা পুশ ফাংশন থাকে। আবার নিজেও বানিয়ে নেয়া যায়।
POP: স্ট্যাক থেকে একটা ডাটা বের করে ফেলাকে পপ করা বলে। এটাও অনেক ল্যাংগুয়েজে আগে থেকেই বানানো থাকে। আবার নিজেও বানায় নেয়া যায়। পপ করলে সবসময় সবার শেষে যেই ডাটা ঢুকানো হয়েছিলো সেটাই পপ হবে।
TOP: এই ফাংশনটা স্ট্যাকের সবার উপরে কোন ডাটাটা আছে সেটা দেখার জন্য ব্যবহার হয়। এটা আমরা একটা ডাটা রিড করার জন্য ব্যবহার করি।
একটা বেসিক স্ট্যাক প্রোগ্রামঃ
-----------------------------------------------------------------------------------------------------------------------
এতক্ষন দেখে মনে হতে পারে যে এই স্ট্যাক জিনিসটার কাজ কি? অনেক কাজ আছে আসলে। একটা সিম্পল উদাহরণ দেই। ধরা যাক অনেক গুলা সংখ্যা ইনপুট নিয়ে সেগুলাকে রিভার্স অর্ডারে প্রিন্ট করতে চাচ্ছি। তখন স্ট্যাক ইউজ করা যেতে পারে। কারন সবার আগে যেটা ইনপুট নিলাম সেটা সবার শেষে প্রিন্ট হবে। আর সবার পরেরটা সবার আগে।
আশা করি বুঝাতে পারলাম।
For Further Studies about Stack:
ডাটা স্ট্রাকচার আমাদেরকে বিভিন্ন ডাটা সাজিয়ে রাখার ব্যবস্থা করে দেয়। ডাটা সাজিয়ে রাখার অনেক গুলো "তরিকা" আছে। কোনকিছু আমরা কেন সাজিয়ে রাখি? যেন পরে নির্দিষ্ট একটা ডাটা সহজে খুঁজে পেতে পারি। "তরিকা" গুলোর নাম Array, Stack, Queue, Linked List, Tree, Graph.
এগুলা শ খানেক ডাটা স্ট্রাকচারের মধ্যে কিছুর নাম, যেগুলো অনেক বেশি ব্যবহার হয়।
এই পোস্টটা স্ট্যাক বুঝানোর জন্য।
স্ট্যাক খুবই ইন্টেরেস্টিং একটা ডাটা স্ট্রাকচার। অনেক কারনেই এটা ব্যাবহার হয়। আগে স্ট্যাক কনসেপ্টটা নিয়ে আলোচনা করা যাক। স্ট্যাক বলতে বোঝায় একটার উপর একটা সাজায়ে রাখা। বিয়ের বাড়িতে আগে মেলামাইনের গ্লাস দেখা যেত একটার ভেতর আরেকটা ঢুকায়ে লম্বা একটা পাইল তৈরি করে একসাথে ক্যারি করা হচ্ছে। এটা একটা স্ট্যাক। প্রোগ্রামিং এর ভাষায় স্ট্যাক এক্সাক্টলি সেইম জিনিসই। তবে একটু ঘষামাজা আছে। আরেকটা উদাহরণ দেয়া যেতে পারে। বয়ামের ভেতর একটার পর আরেকটা বিস্কিট ঢুকিয়ে রাখা হয়। হ্যা, এইটা পারফেক্ট উদাহরণ হয়েছে।
এই বিস্কিট ভর্তি বয়ামের মধ্যে লক্ষণীয় একটা বিষয় আছে। যেই বিস্কিট সবার আগে ঢুকানো হয়েছিলো সেটা সবার পরে বের হবে। যেটা সবার পরে ঢুকেছিলো সেটা সবার আগে বের হবে। এই কনসেপ্টটাকে বলে Last In First Out (LIFO)। প্রোগ্রামিং এর স্ট্যাক ডাটা স্ট্রাকচারও এই LIFO কেই ফলো করে।
স্ট্যাক আমরা বানাই সাধারনত সেই আগের Array দিয়েই (হ্যা এই Array সারাজীবন থাকবে 😄) । একটা একটা করে ডাটা Array তে ঢুকাই আবার পরে দরকারে বের করে আনা যায়। কিন্তু মনে রাখতে হবে যেটা সবার আগে ঢুকাবো সেটা সবার পরে বের হবে।
PUSH: স্ট্যাকে ডাটা ঢুকানোকে পুশ করা বলে। কিছু কিছু প্রোগ্রামিং ল্যাংগুয়েজে আলাদা পুশ ফাংশন থাকে। আবার নিজেও বানিয়ে নেয়া যায়।
POP: স্ট্যাক থেকে একটা ডাটা বের করে ফেলাকে পপ করা বলে। এটাও অনেক ল্যাংগুয়েজে আগে থেকেই বানানো থাকে। আবার নিজেও বানায় নেয়া যায়। পপ করলে সবসময় সবার শেষে যেই ডাটা ঢুকানো হয়েছিলো সেটাই পপ হবে।
TOP: এই ফাংশনটা স্ট্যাকের সবার উপরে কোন ডাটাটা আছে সেটা দেখার জন্য ব্যবহার হয়। এটা আমরা একটা ডাটা রিড করার জন্য ব্যবহার করি।
একটা বেসিক স্ট্যাক প্রোগ্রামঃ
-----------------------------------------------------------------------------------------------------------------------
#include<iostream>
#define SIZE 5
using namespace std;
int STACK[MAX],TOP;
//stack initialization
void initStack(){
TOP=-1;
}
//check it is empty or not
int isEmpty(){
if(TOP==-1)
return 1;
else
return 0;
}
//check stack is full or not
int isFull(){
if(TOP==MAX-1)
return 1;
else
return 0;
}
void push(int num){
if(isFull()){
cout<<"STACK is FULL."<<endl;
return;
}
++TOP;
STACK[TOP]=num;
cout<<num<<" has been inserted."<<endl;
}
void display(){
int i;
if(isEmpty()){
cout<<"STACK is EMPTY."<<endl;
return;
}
for(i=TOP;i>=0;i--){
cout<<STACK[i]<<" ";
}
cout<<endl;
}
//pop - to remove item
void pop(){
int temp;
if(isEmpty()){
cout<<"STACK is EMPTY."<<endl;
return;
}
temp=STACK[TOP];
TOP--;
cout<<temp<<" has been deleted."<<endl;
}
int main(){
int num;
initStack();
char ch;
do{
int a;
cout<<"Chosse \n1.push\n"<<"2.pop\n"<<"3.display\n";
cout<<"Please enter your choice: ";
cin>>a;
switch(a)
{
case 1:
cout<<"Enter an Integer Number: ";
cin>>num;
push(num);
break;
case 2:
pop();
break;
case 3:
display();
break;
default :
cout<<"An Invalid Choice!!!\n";
}
cout<<"Do you want to continue ? ";
cin>>ch;
}while(ch=='Y'||ch=='y');
return 0;
}
এই প্রোগ্রামের মাধ্যমে পুশ পপ আর টপ বোঝানোর চেষ্টা করা হয়েছে। একটু হিজিবিজি মনে হতে পারে। বাট একটু বোঝার চেষ্টা করে দেখা যায়। বুঝলে দেখা যাবে খুবই ইজি।এতক্ষন দেখে মনে হতে পারে যে এই স্ট্যাক জিনিসটার কাজ কি? অনেক কাজ আছে আসলে। একটা সিম্পল উদাহরণ দেই। ধরা যাক অনেক গুলা সংখ্যা ইনপুট নিয়ে সেগুলাকে রিভার্স অর্ডারে প্রিন্ট করতে চাচ্ছি। তখন স্ট্যাক ইউজ করা যেতে পারে। কারন সবার আগে যেটা ইনপুট নিলাম সেটা সবার শেষে প্রিন্ট হবে। আর সবার পরেরটা সবার আগে।
আশা করি বুঝাতে পারলাম।
For Further Studies about Stack:
Code Used in this Post: Include Help
Comments
Post a Comment