স্ট্যাক ও কিউপড়তে ৪ মিনিট লাগবে

স্ট্যাক (Stack)

প্লেটের স্তূপ — যে প্লেটটা সবার শেষে রাখবেন, সেটাই সবার আগে তুলবেন
push: O(1)pop: O(1)peek: O(1)search: O(n)space: O(n)

বিয়ের দাওয়াত বা বুফেতে সাজিয়ে রাখা প্লেটের স্তূপের কথা চিন্তা করুন। আপনি একটা প্লেট রাখলেন, তার ওপর একটা, তার ওপর আরেকটা। যখন কারো প্লেট দরকার পড়বে, সে কিন্তু সবার ওপরের প্লেটটাই তুলবে — একদম নিচেরটা ধরে টান দেবে না।

এটাই হলো স্ট্যাক (Stack)। এর একটাই সুপার সিম্পল নিয়ম: লাস্ট ইন, ফার্স্ট আউট (Last In, First Out) — সংক্ষেপে যাকে বলা হয় LIFO

পুশ (Push) এবং পপ (Pop)

স্ট্যাক নিয়ে কাজ মূলত দুটোই:

  • পুশ (Push) — স্তূপের একদম ওপরে একটা নতুন জিনিস রাখা
  • পপ (Pop) — স্তূপের একদম ওপরের জিনিসটা তুলে নেওয়া

আপনি চাইলে পিক (Peek)-ও করতে পারেন — মানে না তুলেই জাস্ট উঁকি দিয়ে দেখা একদম ওপরে কী আছে।

কোথায় কোথায় স্ট্যাক থাকে?

আমাদের চারপাশে সব জায়গায়! আপনার ব্রাউজারের 'Back' বাটন স্ট্যাক ব্যবহার করে। যখন আপনি কম্পিউটারে কোনো ভুল করে Ctrl+Z চেপে আনডু (Undo) করেন, সেটাও একটা স্ট্যাক। অ্যালগরিদমে ডেপথ-ফার্স্ট সার্চ (DFS) পাথ খুঁজতে স্ট্যাক ব্যবহার করে। এমনকী আপনার লেখা কোডও একটা কল স্ট্যাক (Call Stack)-এর ওপর চলে — যখনই একটা ফাংশন আরেকটা ফাংশনকে ডাকে, সেটা স্ট্যাকের ওপরে পুশ হয়, আর কাজ শেষ হলে পপ হয়ে যায়।

প্লেট পুশ এবং পপ করুন!

← → অ্যারো কি (arrow key) ব্যবহার করুন · উপাদানগুলোতে ক্লিক করুন

দ্রষ্টব্য: স্ট্যাকে আপনি শুধু ওপরের জিনিসটাই ধরতে পারবেন — অনেকটা কোটার ভেতর রাখা বিস্কুটের মতো, সবার ওপরেরটা না খেয়ে নিচেরটা বের করা সম্ভব না!

পুশ আর পপ কেন O(1) হয়?

স্ট্যাক সবসময় জানে তার একদম ওপর বা 'টপ' কোথায় আছে। ওপরে নতুন কিছু রাখা বা ওপর থেকে কিছু সরিয়ে নেওয়ার জন্য খোঁজাখুঁজির কোনো দরকার পড়ে না — একটাই সোজা স্টেপ। স্তূপ যত বড়ই হোক না কেন, এই কাজটা একদম চোখের পলকেই হয়ে যায়।

খোঁজা বা সার্চ কেন O(n) হয়?

যদি স্তূপের একদম মাঝামাঝি বা নিচে চাপা পড়ে থাকা কোনো নির্দিষ্ট জিনিস আপনাকে খুঁজতে হয়, তবে আপনাকে ওপর থেকে একটা একটা করে জিনিস পপ করে সরাতে হবে। সবচেয়ে খারাপ অবস্থায় (Worst Case), আপনাকে হয়তো পুরো স্ট্যাকটাই খালি করে ফেলার পর কাঙ্ক্ষিত জিনিসটা পেতে হবে।

কল স্ট্যাক (The Call Stack)

আপনার কোড যখন রান করে, তখন প্রতিটা ফাংশন কল একটা 'কল স্ট্যাক'-এ পুশ হয়। ফাংশনটার কাজ শেষ হলে সেটা পপ হয়ে বের হয়ে যায়। যদি কোনো ফাংশন কাজ শেষ না করে শুধু আরেকটাকে ডাকতেই থাকে ডাকতেই থাকে, তখন একটা সময় স্ট্যাকের জায়গা শেষ হয়ে যায়, আর তখনই দেখা দেয় সেই বিখ্যাত স্ট্যাক ওভারফ্লো (Stack Overflow) এরর!

Complexity

Push (রাখা)
জাস্ট ওপরে রেখে দেওয়া
সাথে সাথে O(1)
Pop (তোলা)
ওপর থেকে সরিয়ে নেওয়া
সাথে সাথে O(1)
Peek (উঁকি দিয়ে দেখা)
না তুলেই শুধু ওপরে দেখা
সাথে সাথে O(1)
Search (খোঁজা)
পপ করে করে খুঁজতে হবে
স্লো O(n)
Space (জায়গা)
প্রতিটা জিনিসের জন্য একটা জায়গা
n-এর সাথে বাড়ে O(n)
Challenge

ছোট কুইজ

আপনি একটা স্ট্যাকে প্রথমে ১০ পুশ করলেন, তারপর ২০, শেষে ৩০ পুশ করলেন। এখন পপ (pop) করলে কোনটা বের হয়ে আসবে?

পড়া চালিয়ে যান