স্ট্যাক হল একটি লিনিয়ার ডেটা স্ট্রাকচার যা লাস্ট ইন ফার্স্ট আউট-এ কাজ করে মেকানিজম (LIFO)। স্ট্যাকের মধ্যে যে উপাদানটি প্রথমে প্রবেশ করে সেটি শেষ প্রক্রিয়া করা হয়।
উদাহরণ
স্ট্যাক ডাটা স্ট্রাকচার বোঝা যায় খাবারের স্ট্যাকের উদাহরণের সাহায্যে।
থালা-বাসন একের পর এক স্তূপ হয়ে আছে। প্রথম প্লেট বা থালাটি গাদাটির নীচে এবং রাখা শেষ থালাটি গাদা বা স্ট্যাকের উপরে। যখনই আমাদের একটি প্লেটের প্রয়োজন হবে, আমরা স্ট্যাকের শীর্ষে প্লেটটি তুলে নেব যা প্লেটটি সন্নিবেশিত বা সর্বশেষে স্থাপন করা হয়। যে প্লেটটি প্রথমে রাখা হয়েছিল সেটিই শেষ করা হবে। এইভাবে, লাস্ট ইন ফার্স্ট আউট মেকানিজম অনুসরণ করা হয়।
পাইথনে স্ট্যাকের বাস্তবায়ন
পাইথনে স্ট্যাক অন্যান্য লিনিয়ার ডেটা স্ট্রাকচার বা পাইথন লাইব্রেরিতে অন্তর্নির্মিত মডিউল ব্যবহার করে বিভিন্ন উপায়ে প্রয়োগ করা যেতে পারে।
পদ্ধতি 1 - তালিকা ব্যবহার করে প্রয়োগ করুন
পাইথনের স্ট্যাক তালিকা ব্যবহার করে প্রয়োগ করা যেতে পারে। কিন্তু, স্ট্যাক বাস্তবায়নের জন্য তালিকা ব্যবহার করা খুব বেশি কার্যকর নয় এবং তাই সুপারিশ করা হয় না।
অপারেশন জড়িত
সংযোজন() − এই ফাংশনটি স্ট্যাকের শেষে একটি উপাদান যোগ করে।
পপ() − এই ফাংশনটি স্ট্যাকের শেষ বা উপরের উপাদানটিকে সরিয়ে দেয় এবং ফেরত দেয়৷ এই ফাংশনটি LIFO ক্রমে উপাদানগুলিকে পপ করে৷
উদাহরণ
stack=[] stack.append(1) stack.append(2) stack.append(3) print("Intial Stack",stack) print("Element popped from the stack") print(stack.pop()) print(stack.pop()) print("Stack after popping some elements",stack)
আউটপুট
Intial Stack [1, 2, 3] Element popped from the stack 3 2 Stack after popping some elements [1]
স্ট্যাক খালি হয়ে গেলে আপনি আরও উপাদান সরাতে পারবেন না। এটি করলে ব্যতিক্রম হয়।
stack.pop() IndexError: pop from empty list
পদ্ধতি 2 - সারি ব্যবহার করে প্রয়োগ করুন।LifoQueue
এটি পাইথন থেকে অন্তর্নির্মিত মডিউল ব্যবহার করে স্ট্যাক বাস্তবায়নের উপায়। আমাদের সারি থেকে LifoQueue আমদানি করতে হবে। আমরা LifoQueue শুরু করতে পারি বা কিছু নির্দিষ্ট আকার দিয়ে স্ট্যাক করতে পারি। শূন্যের আকার মানে একটি অসীম স্ট্যাক।
অপারেশন জড়িত
সর্বোচ্চ আকার - একটি স্ট্যাকে অনুমোদিত উপাদানের সর্বাধিক সংখ্যা
পান() − স্ট্যাক থেকে শেষ বা উপরের উপাদানটি সরান এবং ফেরত দিন৷ স্ট্যাক খালি থাকলে, স্ট্যাকের অন্তত একটি উপাদান না থাকা পর্যন্ত অপেক্ষা করুন৷
get_nowait() − স্ট্যাক থেকে শেষ উপাদানটি সরান এবং ফিরিয়ে দিন৷ যদি স্ট্যাক খালি থাকে, একটি ব্যতিক্রম উত্থাপন করুন৷
পুট(আইটেম) − স্ট্যাকের শেষে একটি উপাদান যুক্ত করুন৷ স্ট্যাকটি পূর্ণ হলে, একটি বিনামূল্যের স্লট পাওয়া পর্যন্ত অপেক্ষা করুন৷
put_nowait(আইটেম) − স্ট্যাকের শেষে একটি উপাদান যোগ করুন। স্ট্যাক পূর্ণ হলে, একটি ব্যতিক্রম বাড়ান।
পূর্ণ() − স্ট্যাক পূর্ণ হলে সত্য ফেরত দেয়, অন্যথায় মিথ্যা ফেরত দেয়।
খালি() স্ট্যাক খালি থাকলে True ফেরত দিন, অন্যথা মিথ্যা
qsize() − স্ট্যাকে উপস্থিত উপাদানের সংখ্যা প্রদান করে
উদাহরণ
from queue import LifoQueue s=LifoQueue(maxsize=3) s.put(1) s.put(2) s.put(3) print("Is stack full",s.full()) print("Element popped from the stack") print(s.get()) print(s.get()) print("Number of elements in stack",s.qsize()) print("Is stack empty",s.empty())
আউটপুট
Is stack full True Element popped from the stack 3 2 Number of elements in stack 1 Is stack empty False
পদ্ধতি 3:collections.deque ব্যবহার করে প্রয়োগ করুন
এটি পাইথনে স্ট্যাক বাস্তবায়নের আরেকটি উপায়। আমাদের সংগ্রহ মডিউল থেকে deque আমদানি করতে হবে।
অপারেশন জড়িত
সংযোজন() − এই ফাংশনটি স্ট্যাকের শেষে একটি উপাদান যোগ করে।
পপ() − এই ফাংশনটি O(1) সময়ের জটিলতায় স্ট্যাকের শেষ উপাদানটিকে সরিয়ে দেয় এবং ফেরত দেয়।
উদাহরণ
from collections import deque stack=deque() stack.append(1) stack.append(2) stack.append(3) print("Intial stack: ",stack) print("Element popped from the stack") print(stack.pop()) print(stack.pop()) print("Stack after popping some elements: ",stack)
আউটপুট
Intial stack: deque([1, 2, 3]) Element popped from the stack 3 2 Stack after popping some elements: deque([1])
একটি খালি ডিকে pop() ফাংশন ব্যবহার করলে একটি ব্যতিক্রম হবে৷