কম্পিউটার সাইন্স/এপ্লিকেশনে এ স্ট্যাক হল ভীষণ গুরুত্বপূর্ণ একটি ডেটা স্ট্রাকচার। আজকে আমরা এই পোস্টে আলোচনা করব array ব্যাবহার করে কিভাবে একটি stack তৈরি করব , stack এর বিভিন্ন অপারেশন ।
Table of Contents
Define Stack in Data Structures
স্ট্যাক হলো একটি linear ডেটা স্ট্রাকচার কারণ stack এ এলিমেন্ট গুলি একটি নির্দিষ্ট sequence গঠন করে ।
যেহেতু stack এ এলিমেন্ট insertion এবং deletion অপারেশন সবসময় stack র শেষেই হয় সেই কারণে স্ট্যাক লাস্ট ইন ফার্স্ট আউট(Last In First Out) বা LIFO অর্ডার ফলো করে।
Operation associated with stack
stack এর বেসিক অপারেশন গুলি আমরা নীচে আলোচনা করেছি।
- Push – স্ট্যাক -এ একটি এলিমেন্টকে insert করা।
- Pop – স্ট্যাক থেকে একটি এলিমেন্টকে delete করা।
- Peek – স্ট্যাক -এর সবার উপরের এলিমেন্টকে দেখানো।
- Isempty – এই মেথডটি ব্যবহৃত হয় স্ট্যাকটি খালি কিনা চেক করার জন্য।
- Isfull – এই মেথডটি ব্যবহৃত হয় স্ট্যাকটি ভর্তি কিনা চেক করার জন্য।
Also Read :- What is String in Python | Learn in Easy Bengali 2024
Two Important Situations On Stack
Stack Overflow
যখন আমরা কোন এলিমেন্টকে স্ট্যাক -এ push করব তখন আমাদের অবশ্যই চেক করা প্রয়োজন স্ট্যাকটি ভর্তি (full) কিনা। যদি স্ট্যাকটি সম্পূর্ণরূপে ভর্তি হয়, তখন আমরা নতুন কোন এলিমেন্টকে স্ট্যাক -এ push করতে পারব না। এই সিচুয়েশনটিকেই বলা হয় Stack Overflow।
তবে এটি fixed সাইজ স্ট্যাক -এর ক্ষেত্রেই প্রযোজ্য।
Stack Underflow
যখন আমরা কোন এলিমেন্টকে স্ট্যাক থেকে peek বা pop করব তখন আমাদের অবশ্যই চেক করা প্রয়োজন স্ট্যাকটি খালি (empty) কিনা। যদি স্ট্যাকটি সম্পূর্ণরূপে খালি (empty) হয়, তখন আমরা কোন এলিমেন্টকে স্ট্যাক থেকে peek বা pop করতে পারব না। এই খালি (empty) সিচুয়েশনটিকেই বলা হয় Stack Underflow।
Also Read :- What is Tuple in Python in Easy Bengali 2024
Stack representation using array
যেহেতু পাইথনে array নামক কোনো in-built ডেটা স্ট্রাকচার নেই। সেই কারণে আমরা array মডিউল ব্যাবহার করে array নিয়ে কাজ করতে পারবো।
এখন আমরা দেখব , আমরা কিভাবে উপরের অপারেশন গুলির জন্য পাইথনে ফাংশন লিখব এবং সর্বশেষে , তৈরি করা ফাংশন গুলিকে ব্যবহার করে কিভাবে একটি ক্লাস(class) তৈরী করব।
সবার আগে আমরা mystack নামে একটা fixed সাইজ array তৈরি করব, পাইথনের array নামক মডিউল ব্যাবহার করে এবং array টির প্রত্যেকটি index এ ভ্যালু হিসাবে 0 দিয়ে ইনিশিয়ালাইজ করে রাখবো এবং সাথে আরও একটি integer ভ্যারিয়েবল নেবো যার নাম top এবং তাকে -1 দিয়ে ইনিশিয়ালাইজ করে রাখবো।
তবে class এর মধ্যে আমাদের “init_()” মেথডেই , উপরের সমস্ত কাজগুলি করতে হবে।
Why we required a variable name top? ( কেনো আমদের টপ নামক একটি ভ্যারিয়েবলের প্রয়োজন?)
top মূলত একটি integer ভ্যারিয়েবল , যার মধ্যে আমরা array পজিশন store করে রাখি স্ট্যাক -এ অপারেশনের জন্য। এবং সবার প্রথমেই top কে -1 দিয়ে ইনিশিয়ালাইজ করে রাখবো।
top এর ভ্যালু -1 নির্দেশ করে stack টি খালি (empty )
এবং
top ভ্যালু ( array সাইজ – 1 ) নির্দেশ করে stack টি পরিপূর্ণ(full) ।
Create a array
class ব্যবহার না করে।
from array import array
mystack=array('i',[0]*size)
top=-1
Pythonclass ব্যবহার করে।
from array import array
class stack:
def __init__(self,size):
self.mystack=array('i',[0]*size)
self.top=-1
PythonPush ( ) operation
স্ট্যাক -এ এলিমেন্ট insert করতে Push ( ) মেথড ব্যাবহার করা হয়।
Step – 1
যেহেতু আমরা একটি এলিমেন্ট insert করব সেই জন্য ফাংশনে আমরা element নামক একটি প্যারামিটার নেব।
Step – 2
যদি( if condition ) top এর ভ্যালু ( array সাইজ – 1 ) হয় তাহলে stack overflow অর্থাৎ element কে ইনসার্ট করাতে পারবো না।
অন্যথায়( else condition ) top এর ভ্যালু এক (+1) করে বাড়াবো।
Step – 3
array এর top পজিশন এ সময় element টিকে ইনসার্ট করবো।
def push(self,element): # push method
if top==len(mystack)-1:
print("stack overflow")
else:
top+=1
mystack[top]=element
PythonPop ( ) operation
স্ট্যাক থেকে এলিমেন্ট delete করতে pop ( ) মেথড ব্যাবহার করা হয়।
Step – 1
যদি( if condition ) top এর ভ্যালু – 1 হয় তাহলে stack underflow অর্থাৎ স্ট্যাকটি সম্পূর্ণ খালি (empty)।
অন্যথায়( else condition )
একটা ভ্যারিয়েবল এ array এর top পজিশনে থাকা ভ্যালু টিকে স্টোর করব। এবং top এর ভ্যালু এক (-1) কমাবো।
তবে ভ্যালু টিকে ডিলিট করব না ভ্যালুটি সেই ভাবেই ওই array এর মধ্যে থাকবে যেটিকে আমরা garbage value বলি।
Step – 2
return স্টেটমেন্ট ব্যবহার করে ভ্যালু টিকে রিটার্ন করব।
def pop(): # pop method
if top==-1:
print("stack underflow")
else:
value=mystack[top]
top-=1
return value
PythonPeek ( ) operation
একটি স্ট্যাক -এর সবার উপরের এলিমেন্টকে দেখানোর জন্যে peek ( ) মেথড ব্যাবহার করা হয়।
আমরা array এর top পজিশনের ভ্যালু টিকে রিটার্ন করব, return স্টেটমেন্ট ব্যবহার করে।
def peek(): # peek method
return mystack[top]
PythonIsempty ( ) method
এই মেথডটি ব্যবহৃত হয় স্ট্যাকটি খালি কিনা চেক করার জন্য।
যদি top এর ভ্যালু -1 হয় তাহলে True রিটার্ন করবে অন্যথায় False রিটার্ন করবে।
def is_empty(): # isempty method
return top==-1
PythonIsfull ( ) method
এই মেথডটি ব্যবহৃত হয় স্ট্যাকটি ভর্তি কিনা চেক করার জন্য।
যদি top এর ভ্যালু ( array সাইজ – 1 ) হয় তাহলে True রিটার্ন করবে অন্যথায় False রিটার্ন করবে।
def is_full(self): # isfull method
return self.top==(len(self.mystack) -1)
Pythonimplement a stack using class
এখন আমরা দেখব , কিভাবে স্ট্যাক নামের একটি class তৈরি করে , ওপরের ফাংশন গুলির কিছু syntax পরিবর্তন করে আমরা একটি স্ট্যাক তৈরি করতে পারি।
প্রথমে আমরা ,আমাদের কম্পিউটারে data structure বা অন্য যে কোনো নামে একটা ফোল্ডার তৈরি করব। সেই ফোল্ডারে stack.py নামে একটা পাইথন ফাইল তৈরি করব।
এরপর সেখানে আমরা নিম্নলিখিত কোডটিকে paste করব।
from array import array # import array from array module
class stack:
def __init__(self,size): # here __init__() is a special method called constructor.
self.mystack=array('i',[0]*size) # create an empty list called mystack
# here, self is a keyword refers to the instance of the class
self.top=-1
def push(self,element): # push method
if self.top==-1:
self.top=0
else:
self.top+=1
self.mystack[self.top]=element
def pop(self): # pop method
item = self.mystack[self.top]
self.top-=1
return item
def peek(self): # peek method
return self.mystack[self.top]
def is_empty(self): # isempty method
return self.top==-1
def is_full(self): # isfull method
return self.top==(len(self.mystack) -1)
def display(self): # display method
length=len(self.mystack)-1
print()
for i in range(length,-1,-1):
print(' |',format(self.mystack[i],'>3'),'|')
print(' -------')
Pythonএখানে আমরা display নামক একটি অতিরিক্ত মেথড ব্যবহার করেছি যেটির কাজ হল স্ট্যাক -এর এলিমেন্ট গুলিকে ডিসপ্লে করানো।
এবার আমরা আমাদের বানানো stack.py মডিউলটিকে আমাদের অন্য আরেকটি ফাইলে import করব। এবং একটি menu-driven প্রোগ্রাম লিখে স্ট্যাক -এর ব্যাবহার দেখব।
# syntax of import statement: from file_name import function / class / variable
from starray import stack
stack_size=int(input("Enter the size of stack : "))
my_stack =stack(stack_size) # here we pass the size of stack as an argument
while True:
print("\n1. Push")
print("2. Pop")
print("3. Peek")
print("4. Display")
print("5. Exit")
choice = int(input("Enter your choice: "))
match choice:
case 1:
element = int(input("Enter element to push: "))
if my_stack.is_full():
print("Stack Overflow")
else:
my_stack.push(element)
case 2:
if my_stack.is_empty():
print("Stack Underflow")
else:
popped = my_stack.pop()
print("Popped element:", popped)
case 3:
if my_stack.is_empty():
print("Stack Underflow")
else:
top_element = my_stack.peek()
print("Top element:", top_element)
case 4:
my_stack.display()
case 5:
print("Exiting the program...")
exit()
case _:
print("Invalid choice. Please enter a valid option.")
PythonOutput
Enter the size of stack : 3
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to push: 2
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to push: 3
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to push: 4
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to push: 5
Stack Overflow
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 1
Enter element to push: 6
Stack Overflow
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 4
| 4 |
-------
| 3 |
-------
| 2 |
-------
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 2
Popped element: 4
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 4
| 4 |
-------
| 3 |
-------
| 2 |
-------
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 3
Top element: 3
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 3
Top element: 3
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 2
Popped element: 3
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 2
Popped element: 2
1. Push
2. Pop
3. Peek
4. Display
5. Exit
Enter your choice: 2
Stack Underflow
1. Push
3. Peek
4. Display
5. Exit
Enter your choice: 5
Exiting the program...
1. Push
3. Peek
4. Display
5. Exit
Enter your choice: 5
Exiting the program...
Also Read :- What are Data Structures in Python in Easy Bengali 2024
এই পোস্টটি পড়ে আপনাদের মূলবান মতামত জানাতে আমাদের কমেন্ট করুন। আপনাদের কোনো প্রশ্ন থাকলে নির্দ্ধিধায় জিজ্ঞেসা করুন। আমরা চেষ্টা করবো যতো দ্রুত সম্ভব উত্তর দেবার।
ধন্যবাদ!!