স্ট্যাক একটি অ্যাবস্ট্রাক্ট ডেটা স্ট্রাকচার যা উপাদানগুলির একটি সংগ্রহ ধারণ করে। স্ট্যাক LIFO (Last In First Out) মেকানিজম বাস্তবায়ন করে অর্থাৎ যে উপাদানটি শেষে পুশ করা হয় সেটিই প্রথমে পপ হয়। স্ট্যাকে কিছু মূল অপারেশন রয়েছে:
- Push - এটি স্ট্যাকের উপরে একটি ডেটা ভ্যালু যোগ করে।
- Pop - এটি স্ট্যাকের উপরে থাকা ডেটা ভ্যালু রিমুভ করে।
- Peek - এটি স্ট্যাকের শীর্ষ ডেটা ভ্যালু রিটার্ন করে।
অ্যারে ব্যবহার করে স্ট্যাক বাস্তবায়ন করার একটি প্রোগ্রাম নিচে দেওয়া হলো:
উদাহরণ
#include <iostream>
using namespace std;
int stack[100], n = 100, top = -1;
void push(int val) {
if (top >= n - 1)
cout << "Stack Overflow" << endl;
else {
top++;
stack[top] = val;
}
}
void pop() {
if (top <= -1)
cout << "Stack Underflow" << endl;
else {
cout << "The popped element is " << stack[top] << endl;
top--;
}
}
void display() {
if (top >= 0) {
cout << "Stack elements are: ";
for (int i = top; i >= 0; i--)
cout << stack[i] << " ";
cout << endl;
} else
cout << "Stack is empty";
}
int main() {
int ch, val;
cout << "1) Push in stack" << endl;
cout << "2) Pop from stack" << endl;
cout << "3) Display stack" << endl;
cout << "4) Exit" << endl;
do {
cout << "Enter choice: " << endl;
cin >> ch;
switch (ch) {
case 1: {
cout << "Enter value to be pushed:" << endl;
cin >> val;
push(val);
break;
}
case 2: {
pop();
break;
}
case 3: {
display();
break;
}
case 4: {
cout << "Exit" << endl;
break;
}
default: {
cout << "Invalid Choice" << endl;
}
}
} while (ch != 4);
return 0;
}
আউটপুট
1) Push in stack 2) Pop from stack 3) Display stack 4) Exit Enter choice: 1 Enter value to be pushed: 2 Enter choice: 1 Enter value to be pushed: 6 Enter choice: 1 Enter value to be pushed: 8 Enter choice: 1 Enter value to be pushed: 7 Enter choice: 2 The popped element is 7 Enter choice: 3 Stack elements are: 8 6 2 Enter choice: 5 Invalid Choice Enter choice: 4 Exit
উপরোক্ত প্রোগ্রামে, push() ফাংশনটি val আর্গুমেন্ট নেয় অর্থাৎ স্টাকে পুশ করার মান। যদি top, n-1-এর চেয়ে বড় বা সমান হয়, তবে স্টাকে স্পেস নেই এবং ওভারফ্লো প্রিন্ট করা হয়। অন্যথায়, val স্টাকে পুশ করা হয়। এর কোড স্নিপেট নিচে দেওয়া হলো:
void push(int val) {
if (top >= n - 1)
cout << "Stack Overflow" << endl;
else {
top++;
stack[top] = val;
}
}
pop() ফাংশনটি স্ট্যাকের শীর্ষতম মান পপ করে, যদি কোনো মান থাকে। যদি স্ট্যাক খালি থাকে তবে আন্ডারফ্লো প্রিন্ট করা হয়। এটি নিচে দেওয়া হলো:
void pop() {
if (top <= -1)
cout << "Stack Underflow" << endl;
else {
cout << "The popped element is " << stack[top] << endl;
top--;
}
}
display() ফাংশনটি স্ট্যাকের সমস্ত উপাদান প্রদর্শন করে। এটি একটি ফর লুপ ব্যবহার করে। যদি স্ট্যাকে কোনো উপাদান না থাকে, তবে "Stack is empty" প্রিন্ট করা হয়। এটি নিচে দেওয়া হলো:
void display() {
if (top >= 0) {
cout << "Stack elements are: ";
for (int i = top; i >= 0; i--)
cout << stack[i] << " ";
cout << endl;
} else
cout << "Stack is empty";
}
main() ফাংশন ব্যবহারকারীকে পুশ, পপ বা ডিসপ্লে স্ট্যাক করার পছন্দ দেয়। ব্যবহারকারীর প্রতিক্রিয়া অনুযায়ী, উপযুক্ত ফাংশনটি স্যুইচ ব্যবহার করে কল করা হয়। যদি ব্যবহারকারী অবৈধ প্রতিক্রিয়া দেয়, তবে সেটি প্রিন্ট করা হয়। এর কোড স্নিপেট নিচে দেওয়া হলো:
int main() {
int ch, val;
cout << "1) Push in stack" << endl;
cout << "2) Pop from stack" << endl;
cout << "3) Display stack" << endl;
cout << "4) Exit" << endl;
do {
cout << "Enter choice: " << endl;
cin >> ch;
switch (ch) {
case 1: {
cout << "Enter value to be pushed:" << endl;
cin >> val;
push(val);
break;
}
case 2: {
pop();
break;
}
case 3: {
display();
break;
}
case 4: {
cout << "Exit" << endl;
break;
}
default: {
cout << "Invalid Choice" << endl;
}
}
} while (ch != 4);
return 0;
}