স্ট্যাক একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যের ব্যাপক ব্যবহার রয়েছে।
প্রোগ্রামিং-এ, স্ট্যাক আপনাকে ডেটা লাস্ট-ইন, ফার্স্ট-আউট (LIFO) অর্ডারে সংরক্ষণ করতে দেয়। এর মানে হলো, স্ট্যাকে সংরক্ষিত শেষ আইটেমটি প্রথমে প্রসেস হবে।
কিন্তু পাইথনে স্ট্যাক কীভাবে তৈরি করবেন? সেটিই আমরা এই গাইডে উত্তর দেব। এই গাইড পড়া শেষ করার সময়, আপনি পাইথনে স্ট্যাক তৈরি এবং কাজ করার এক্সপার্ট হয়ে যাবেন।
পাইথন স্ট্যাকস
স্ট্যাক ডেটা লাস্ট-ইন, ফার্স্ট-আউট (LIFO) অর্ডারে সংরক্ষণ করে।
এই অর্ডার কীভাবে কাজ করে বুঝতে, একটি থালির স্ট্যাক ভাবুন। আপনার কাছে ধulai থালির স্ট্যাক থাকলে, আপনি যেটি প্রথম সরাবেন সেটি হলো উপরের থালিটি। তারপর, থালিগুলো সরাতে সরাতে আপনি স্ট্যাকের নিচের থালিগুলো এক্সেস করতে পারবেন।
স্ট্যাক পাইথনে কিউর বিপরীত। কিউ লিস্ট недав sensiblement অ্যাড করা আইটেমটি রিমুভ করে (কারণ সেটি ফার্স্ট-ইন, ফার্স্ট-আউট স্ট্রাকচার ব্যবহার করে), যেখানে স্ট্যাক সবচেয়ে gầnে অ্যাড করা আইটেমটি রিমুভ করে (কারণ সেটি লাস্ট-ইন, ফার্স্ট-আউট স্ট্রাকচার ব্যবহার করে)।
স্ট্যাক সাধারণত দুটি অপারেশন সাপোর্ট করে: পুশ এবং পপ। পুশিং আপনাকে একটি আইটেম স্ট্যাকে টপে যোগ করতে দেয়, এবং পপিং আপনাকে স্ট্যাকে টপের আইটেম রিমুভ করতে দেয়।
পাইথনে, স্ট্যাক তৈরির দুটি প্রধান পদ্ধতি রয়েছে: বিল্ট-ইন লিস্ট ব্যবহার করা, এবং collections.deque() ক্লাস ব্যবহার করা। চলুন প্রতিটি পদ্ধতি কীভাবে কাজ করে তা ব্রেক ডাউন করি।
পাইথন বিল্ট-ইন লিস্ট
বিল্ট-ইন লিস্ট ডেটা টাইপ আপনাকে পাইথনে স্ট্যাক তৈরি করতে দেয়।
কারণ পাইথন লিস্ট অ্যারে হিসেবে ইমপ্লিমেন্টেড, আপনি সহজে সেগুলোতে আইটেম যোগ এবং রিমুভ করতে পারেন। এছায়া, আপনি লিস্টে ভ্যালু ইনসার্ট করার অর্ডার প্রিজার্ভড থাকে, মানে আপনি লিস্টের প্রথম এবং শেষ আইটেম সহজে রিমুভ করতে পারেন।
ধরুন, আমরা একটি ক্লাসে হোমওয়ার্ক অ্যাসাইনমেন্টের লিস্ট সংরক্ষণ করার জন্য একটি স্ট্যাক তৈরি করতে চাই। টিচার এই অ্যাসাইনমেন্টগুলো পাইলেতে থাকা অর্ডারে গ্রেড করতে চান (তাই, প্রথম হাতের অ্যাসাইনমেন্ট স্ট্যাকে বটমে থাকবে, এবং শেষ হাতের অ্যাসাইনমেন্ট টপে থাকবে)।
স্ট্যাকে আইটেম যোগ করা
স্ট্যাকে আইটেম যোগ করতে, আমরা append() মেথড ব্যবহার করতে পারি। আমরা আমাদের হোমওয়ার্ক অ্যাসাইনমেন্ট স্ট্যাক নিচের কোড দিয়ে তৈরি করতে পারি:
assignments = []
assignments.append("Hannah")
assignments.append("Benny")
assignments.append("Gordon")
print(assignments)
আমাদের কোড রিটার্ন করে:
['Hannah','Benny','Gordon']
আমাদের কোডে, আমরা প্রথমে assignments নামে একটি লিস্ট ডিক্লেয়ার করেছি। তারপর, আমরা append() মেথড ব্যবহার করে আমাদের হাতে দেওয়া অ্যাসাইনমেন্টের লিস্টে তিনটি নাম যোগ করেছি। আমরা যে অর্ডারে নামগুলো যোগ করেছি: Hannah, Benny, Gordon। কারণ Gordon শেষে অ্যাসাইনমেন্ট দিয়েছে, তাই সেটি আমাদের লিস্টের ফাইনাল পজিশনে আছে।
স্ট্যাক থেকে আইটেম রিমুভ করা
ধরুন, আমরা Gordon-এর অ্যাসাইনমেন্ট গ্রেড করেছি, এবং জানতে চাই পরের কোনটি গ্রেড করতে হবে। এতে আমাদের স্ট্যাকে টপের আইটেম রিমুভ করা জড়িত।
স্ট্যাক থেকে আইটেম রিমুভ করতে, আমরা pop() মেথড ব্যবহার করতে পারি। স্ট্যাকে টপ আইটেম রিমুভ করার কোড:
assignments = []
assignments.append("Hannah")
assignments.append("Benny")
assignments.append("Gordon")
assignments.pop()
print(assignments)
আমাদের কোড রিটার্ন করে:
['Hannah','Benny']
pop() ব্যবহার করে Gordon-এর নাম স্ট্যাক থেকে রিমুভ করা হয়েছে, এবং এখন আমাদের স্ট্যাকে শুধু দুটি নাম রয়েছে: Hannah এবং Benny।
collections.deque ক্লাস
collections লাইব্রেরির deque ক্লাস আপনাকে একটি ডাবল-এন্ডেড কিউ তৈরি করতে দেয়।
deque অবজেক্ট ডাবলি-লিংকড লিস্ট হিসেবে ইমপ্লিমেন্টেড, মানে এলিমেন্ট ইনসার্ট এবং ডিলিট করার ক্ষেত্রে এর স্ট্রং এবং কনসিস্টেন্ট পারফরম্যান্স রয়েছে। এছাড়া, যেহেতু collections লাইব্রেরি পাইথন স্ট্যান্ডার্ড লাইব্রেরির অংশ, তাই আপনি এক্সটার্নাল লাইব্রেরি ডাউনলোড না করেই আপনার কোডে ইম্পোর্ট করতে পারেন।
collections.deque ক্লাসের সাথে কাজ করতে, আমাদের প্রথমে এটি আমাদের কোডে ইম্পোর্ট স্টেটমেন্ট ব্যবহার করে ইম্পোর্ট করতে হবে:
from collections import deque
চলুন আগের হোমওয়ার্ক উদাহরণে ফিরি collections.deque ক্লাস কীভাবে কাজ করে তা ইলাস্ট্রেট করতে।
Deque স্ট্যাকে আইটেম যোগ করা
Deque স্ট্যাকে আইটেম যোগ করতে, আমরা append() মেথড ব্যবহার করতে পারি। ধরুন, আমরা আমাদের হোমওয়ার্ক অ্যাসাইনমেন্টস deque ক্লাস ব্যবহার করে একটি কিউতে তৈরি করতে চাই। নিচের কোড দিয়ে এটি করা যাবে:
from collections import deque
assignments = deque()
assignments.append("Hannah")
assignments.append("Benny")
assignments.append("Gordon")
print(assignments)
আমাদের কোড রিটার্ন করে:
deque(['Hannah','Benny','Gordon'])
আমাদের কোড ব্রেক ডাউন করি। প্রথমে, আমরা collections লাইব্রেরি থেকে deque ক্লাস ইম্পোর্ট করেছি। তারপর, deque() ব্যবহার করে একটি deque তৈরি করেছি এবং এটিকে assignments ভ্যারিয়েবলে অ্যাসাইন করেছি।
এরপর, আমরা আমাদের assignments deque-এ তিনটি নাম যোগ করেছি: Hannah, Benny, এবং Gordon। শেষে, আমরা আমাদের assignments কিউয়ের কন্টেন্ট কনসোলে প্রিন্ট করেছি।
আপনি দেখতে পাচ্ছেন, এই উদাহরণে, আমাদের ডেটা একটি deque হিসেবে সংরক্ষিত হয়েছে স্ট্যাকের বদলে (এটি বোঝাচ্ছে যে আমাদের রেজাল্ট deque()-এ এনক্লোজড)। এটি কারণ আমরা deque স্ট্রাকচার ব্যবহার করছি, যদিও আমাদের ডেটা এখনও স্ট্যাকের মত আচরণ করছে।
Deque স্ট্যাক থেকে আইটেম রিমুভ করা
Deque স্ট্যাক থেকে আইটেম রিমুভ করতে, আপনি pop() মেথড ব্যবহার করতে পারেন।
ধরুন, আমরা Gordon এবং Benny-এর অ্যাসাইনমেন্ট গ্রেড করেছি। সেগুলো আমাদের স্ট্যাক থেকে রিমুভ করতে আমরা নিচের কোড ব্যবহার করতে পারি:
from collections import deque
assignments = deque()
assignments.append("Hannah")
assignments.append("Benny")
assignments.append("Gordon")
assignments.pop()
assignments.pop()
print(assignments)
আমাদের কোড রিটার্ন করে:
deque(['Hannah'])
আমাদের কোডে, আমরা প্রথমে তিনটি ভ্যালু সহ একটি deque স্ট্যাক তৈরি করেছি। তারপর, আমরা pop() স্টেটমেন্ট দুবার এক্সিকিউট করেছি। প্রতিবার pop() স্টেটমেন্ট রান হলে, আমাদের স্ট্যাকে টপের আইটেমটি রিমুভ হয়। এর মানে হলো Gordon এবং তারপর Benny আমাদের স্ট্যাক থেকে রিমুভ হয়েছে, Hannah একমাত্র আইটেম হিসেবে আমাদের স্ট্যাকে রয়েছে।
পাইথন deque ক্লাস সম্পর্কে আরও জানতে, পাইথন কিউ এবং deque-র আমাদের টিউটোরিয়াল পড়ুন।
উপসংহার
স্ট্যাক আপনাকে ডেটা লাস্ট-ইন, ফার্স্ট-আউট অর্ডারে সংরক্ষণ করতে দেয়। পাইথনে স্ট্যাক ইমপ্লিমেন্ট করার বেশ কিছু উপায় রয়েছে, لكن দুটি সবচেয়ে প্র্যাকটিক্যাল পদ্ধতি হলো পাইথন বিল্ট-ইন লিস্ট স্ট্রাকচার ব্যবহার করা, অথবা collections.deque() ক্লাস ব্যবহার করা।
এই টিউটোরিয়ালে, উদাহরণের রেফারেন্স দিয়ে পাইথনে লিস্ট এবং collections.deque() ব্যবহার করে স্ট্যাক কীভাবে তৈরি করতে হয় তা আলোচনা করা হয়েছে। এখন আপনি প্রফেশনাল পাইথন ডেভেলপারের মত নিজের স্ট্যাক তৈরি করার জন্য প্রস্তুত!