১৪-৮ঃ Implement Queue using Stacks (Leetcode)
Last updated
Last updated
এই পেজে আমরা শিখবো , কীভাবে Stack ডাটা স্ট্রাকচার কে ব্যবহার করে Queue ইমপ্লিমেন্ট করা যায়। প্রবলেম লিঙ্কঃ https://leetcode.com/problems/implement-queue-using-stacks/description/ প্রবলেম স্টেট্মেন্ট এ বলা আছে আপনাকে একটি MyQueue ক্লাস দেয়া আছে , যেখানে queue এর মেইন মেইন ফাংশন যেমনঃ push , pop , peek ( front) , empty এই সকল ফাংশন কমপ্লিট করতে হবে। এবং এই ফাংশন গুলা কমপ্লিট করার ক্ষেত্রে Queue এর কোনো concept ব্যবহার করা যাবে না। এই ক্ষেত্রে শুধু মাত্র দুটি stack এর সাহায্যে এই ফাংশন গুলোতে কাজ করতে হবে। আগের প্রবলেমের মতো আমরা প্রত্যেকটি ফাংশন আলাদা ভাবে আলোচনা করি।
push( int x ) : এই ফাংশনে একটি ইন্টিজার x প্যারামিটার হিসেবে পাস করা হবে এবং সেটি Queue তে পুশ করতে হবে। এখন চিন্তা করা যাক , যদি একটি queue এ একটি ভ্যালু পুশ করতে বলা হয় তবে সেটি queue এর শেষে insert হয়ে যাবে । আমরা যদি stack এ একটি ভ্যালু পুশ করি , সেক্ষেত্রে ভ্যালুটি stack এর শেষে insert হয়ে যাবে । যেহেতু stack এবং queue এর ক্ষেত্রে এই কাজ টি একই , তাই এক্ষেত্রে stack এর মধ্যে normally ভ্যালু পুশ করে দিলেই এই ফাংশনের কাজটি হয়ে যাবে।
pop(): এই ফাংশনটি queue এর শুরু থেকে অর্থাৎ front থেকে একটি ভ্যালু ডিলিট করে দিতে পারে। এখন আমাদের যেহেতু stack এর সাহায্যে কাজটি করতে হবে তাই দেখা যায় , stack এ pop এর ক্ষেত্রে যে ভ্যালুটি সবার পরে এসেছে অর্থাৎ শেষের ভ্যালুটি আগে pop হয়ে যাবে তাই এই কাজটি একটি stack এর সাহায্যে করা যাবে না। Solution: এই ক্ষেত্রে যেহেতু stack এর মধ্যে যে ভ্যালুটি সবার আগে enter করেছে তা বের করতে হবে , তাই এইক্ষেত্রে stack এর শেষ ভ্যালুটি ( pop এর ভিত্তিতে শেষের ভ্যালু) আমাদের বের করে আনতে হবে। এই ক্ষেত্রে আমরা আরেকটি temporary stack নিতে পারি । Original stack থেকে pop করে একটি একটি করে ভ্যালু temporary stack এ push করতে থাকবো ,এবং একটি সময় original stack এর শেষ ভ্যালুতে চলে আসবো তখন সেই ভ্যালুটি হবে Queue এর front এর ভ্যালু যেটি আমাদের pop করা লাগবে। এই ভ্যালুটি যেহেতু pop করে দিবো তাই তা আমাদের temporary stack এ রাখতে হবে না। সব ভ্যালু Temporary stack এর মধ্যে রাখার পর আমরা দেখতে পাবো , Original stack এর একটি reverse stack হলো Temporary stack. তাই এক্ষেত্রে আমরা সব কাজ শেষে সরাসরি Originl stack এ temporary stack রেখে দিতে পারবো না। এই ক্ষেত্রে আমাদের temporary stack থেকে ম্যানুয়ালি একটি একটি করে ভ্যালু Original stack এ পুশ করলে আমরা আবার original stack টি ব্যাক পাবো
peek(): উক্ত ফানশন টি queue এর সবার শুরুর ভ্যালুটি রিটার্ন করবে। এই ক্ষেত্রে আমরা pop এর ফাংশনের মতো stack এর শেষের ভ্যালুটি বের করে তা রিটার্ন করে দিবো। খেয়াল রাখতে হবে , pop ফাংশনে শেষ ভ্যালুটি temporary stack এ রাখা হয়নি , কিন্তু এই ক্ষেত্রে যেহেতু আমরা peek এর ভ্যালুটি রিমুভ করবো না , তাই এই ভ্যালুটিও temporary stack এ রাখতে হবে।
empty()ঃ এই ফাংশন টি queue টি খালি কিনা তা চেক করবে। stack এবং queue উভয় এর ক্ষেত্রে তারা খালি থাকলে True রিটার্ন করবে। তাই আমরা normally Stack এর সাহায্যে এই কাজটি করে ফেলতে পারবো।
আসুন এইবার কোড দেখে নেয়া যাক