এই লেখাটি নেয়া হয়েছে “আদর্শ” থেকে প্রকাশিত এবং ঝংকার মাহবুব লিখিত ২য় বই “প্রোগ্রামিংয়ের বলদ টু বস” বই থেকে।
পোলাপান সবকিছু ছাড়া থাকতে পারে, কিন্তু কোল্ড ড্রিংকস ছাড়া থাকতে পারে না। হালকা গরমের দিন, কাচ্চি বিরিয়ানি, বিয়ের দাওয়াত, পিৎজা পার্টি, কোনো কিছুই তাদের কোল্ড ড্রিংকস ছাড়া চলে না। তবে এই সব কোল্ড ড্রিংকসপ্রেমীরা কোনো দিনও চিন্তা করে দেখে না, কোল্ড ড্রিংকস হচ্ছে অতিরিক্ত পরিমাণ চিনি আর কৃত্রিম রঙের শরবত। কোল্ড ড্রিংকসে কার্বন ডাই-অক্সাইড দিয়ে বুদবুদ বানানো হয়। তাই এক গ্লাস কোল্ড ড্রিংকস খাওয়ার মানে— 10 চামচ চিনি, কৃত্রিম রং আর কার্বন ডাই-অক্সাইড খাওয়া।
| Queue ডাটা স্ট্রাকচার | Queue প্রোগ্রামিং |
Queue -এর ঠাসায় ছিঁড়ে জুতা
কয়েকজন স্টুডেন্ট কথা বলতে বলতে চলে যাচ্ছে। তাদের দেখে রাশেদ বলে উঠল, আমাদের স্কুলে বদ স্যার নামে গণিতের এক স্যার ছিল। আসলে স্যারের ভালো নাম ছিল বদিউজ্জামান। সবাই সংক্ষেপে বদি স্যার বলে ডাকত।
বদি স্যারের ক্ল্যাস থাকত স্কুলের লাস্ট পিরিয়ডে। প্রতিদিন ক্লাস শেষ হওয়ার 15 মিনিট আগে অঙ্ক করতে দিয়ে বলত, যে আগে অঙ্ক শেষ করতে পারবে, তার অঙ্ক আগে চেক করা হবে। আর যার অঙ্ক সঠিক হবে, তার ছুটি।
যারা ভালো স্টুডেন্ট ছিল তাদের সমস্যা হতো না। 5 মিনিটের মধ্যেই অঙ্ক শেষ করেই স্যারকে দেখাতে চলে যেত। স্যার অঙ্ক চেক করে ওদের ছুটি দিয়ে দিত। সমস্যা হতো ফেলটুস স্টুডেন্টদের। তারা অঙ্ক মেলাতেও পারত না। স্যারও ছুটি দিত না। এক-দেড় ঘণ্টার বেশি বসায় রাখত। অল্প কিছু হিন্টস দিয়ে আবার অঙ্ক করতে দিত। যতক্ষণ পর্যন্ত, অঙ্ক করতে পারত না, ততক্ষণ পর্যন্ত ছুটি দিত না। এ জন্যই ফেলটুস পোলাপান খেপে গিয়ে বদি স্যারকে ‘বদ স্যার’ বলে ডাকত।
ধর বদি স্যার একজনের খাতা দেখতেছে। সে স্যারের সামনে দাঁড়িয়ে আছে। ওই সময় আরেকজনের অঙ্ক শেষ হলো। সে স্যারের কাছে খাতা নিয়ে আসলে, স্যার বলত, যে দাঁড়িয়ে আছে তার পেছনে লাইন করে দাঁড়া। এর মধ্যে আরও দুই-একজনের অঙ্ক শেষ হলে, তাদের আগে যারা লাইন করে দাঁড়ায় আছে, তাদের পেছনে দাঁড়াতে বলত। স্যার এই সিস্টেম করত যাতে যার অঙ্ক আগে শেষ হইছে, তার খাতা যেন আগে দেখা যায়।
এই ‘আগে আসলে আগে যাবে’ পলিসি অনেক কিছুতেই দেখা যায়। যেমন : ক্লাসে রোল কল করার সময়। যার রোল আগে আসবে, তার রোল আগে কল করা হবে। ডাক্তারের চেম্বারে ভিজিট করতে গেলে, যে আগে সিরিয়াল দেবে তাকে আগে ডাকা হবে। একইভাবে বাসে ওঠার লাইনে, যে আগে দাঁড়াবে সে আগে বাসে উঠবে।
এই লাইনে দাঁড়ানো বা সারিবদ্ধ হয়ে দাঁড়িয়ে কোনো কিছুর জন্য অপেক্ষা করাকে ইংরেজিতে queue (উচ্চারণ হবে : কিউ) বলে। যখন কয়েকজন মানুষ লাইনে দাঁড়িয়ে অপেক্ষা করে, তখন সেই লাইনকে বলে মানুষের লাইন বা মানুষের কিউ। তার মানে মানুষের কিউতে এক বা একাধিক মানুষ থাকে। অর্থাৎ মানুষের কিউয়ের এক একটা উপাদান হচ্ছে এক একজন মানুষ। তবে একটা কিউতে মানুষ না থেকে যদি ডাটা থাকে। অর্থাৎ মানুষের পরিবর্তে ডাটা দিয়ে কিউ বা লাইন বানানো হলে সেটা হবে ডাটার কিউ।
কিউতে যেহেতু একাধিক জিনিস বা ডাটা রাখা যায়, সেহেতু কিউ একটা ডাটা স্ট্রাকচার। এই queue ডাটা স্ট্রাকচারের একটা প্রধান বৈশিষ্ট্য হচ্ছে, ‘আগে আসলে আগে যাবে’। এই আগে আসলে আগে যাবে কথাটাকে ইংরেজিতে বলে, First in first out বা সংক্ষেপে FIFO । খেয়াল করলে দেখবি, First in first out কথাটার প্রথম অক্ষরগুলা নিয়ে FIFO বলা হচ্ছে। যাতে সহজে মনে রাখা যায়।
কিউ ডাটা স্ট্রাকচার দিয়ে প্রোগ্রামিং করা খুবই সোজা। জাস্ট একটা array ডিক্লেয়ার করবি। তার একটা নাম দিবি। ধর তুই নাম দিলি খাতা কিউ(khataQueue);
var khataQueue = [ ];
এখন এই khataQueue-তে নতুন উপাদান যোগ করার জন্য। অর্থাৎ অঙ্ক শেষ করে লাইনে নতুন কেউ এসে দাঁড়ানোর জন্য তাকে নিচের মতো করে khataQueue-তে push করতে হবে। ধর, প্রথমেই আসছে আমিনুল। সে জন্য আমিনুলকে নিচের মতো করে কিউতে যোগ করে দে।
khataQueue.push( “aminul” );
আমিনুলের পরে সিরিয়াল করে মমিনুল, কামরুল, নজরুল, খায়রুলের অঙ্ক শেষ হইছে। তাই তাদের এক এক করে কিউতে যোগ করে দে।
khataQueue.push( “mominul” );
khataQueue.push( “kamrul” );
khataQueue.push( “nazrul” );
khataQueue.push( “khairul” );
এখন khataQueue-কে আউটপুট হিসেবে দেখার জন্য console.log(khataQueue); লিখে আউটপুট দেখলে দেখবি সিরিয়াল অনুসারে [“aminul”, “mominul”, “kamrul”, “nazrul”, “khairul”] দাঁড়িয়ে আছে। এই সিরিয়াল অনুসারে দাঁড়ানোর পর স্যার লাইনের প্রথমে যে আছে তার খাতা নেবেন। অর্থাৎ khataQueue-তে যে উপাদানটা সবার আগে আছে, তাকে নেবে। কোন Queue-এর প্রথম উপাদানটা বের করার জন্য shift ব্যবহার করা হয়। তাই khataQueue থেকে প্রথম উপাদানটা বের করার জন্য khataQueue লিখে ডট চিহ্ন (.) দিয়ে shift লিখে দুইটা প্রথম ব্র্যাকেট দিয়া দিবি। নিচের মতো করে—
khataQueue.shift();
ওপরের কোড লিখে রান করলে লাইনের প্রথমে যে আছে সে বের হয়ে যাবে। সবার আগে ছিল aminul। তাই khataQueue.shift(); লিখলে aminul-কে কিউ থেকে বের করে দেবে। এখন console.log(khataQueue); রান করলে আউটপুট হিসেবে [“mominul”, “kamrul”, “nazrul”, “khairul”] পাবি। আবার khataQueue.shift(); লিখে কোড রান করলে mominul বের হয়ে আসবে। এইবার console.log করলে তিনটা জিনিস পাবি।
এ রকম [“kamrul”, “nazrul”, “khairul”]। এভাবে Queue-এর মধ্যে যতক্ষণ উপাদান আছে, ততক্ষণ পর্যন্ত shift ব্যবহার করে উপাদান বের করতে পারবি। এখন পর্যন্ত তুই দুইটা বেসিক ডাটা স্ট্রাকচারের কনসেপ্ট শিখে ফেলছস। একটা হচ্ছে স্ট্যাক। আরেকটা কিউ। মনে রাখবি, স্ট্যাক হচ্ছে LIFO আর কিউ হচ্ছে FIFO.
নিজে নিজে কর
৩.১ : চা-দোকানে যে আগে চা অর্ডার দেয় তাকে আগে চা বানিয়ে দেওয়া হয়। আর যে পরে চায়ে অর্ডার দেয় তাকে পরে চা বানিয়ে দেওয়া হয়। তাহলে বল, চা-দোকানে কোন পলিসি ফলো করা হয়?
উত্তর :
৩.২: এমন একটা কাজ বা জায়গার নাম লেখ, যেখানে আগে আসলে আগে যাবে পলিসি অ্যাপ্লাই করা হয়।
উত্তর :
৩.৩: এক পরিচালক গেছে সাধের লাউ বানাইলো মোরে বৈরাগী গানের মিউজিক ভিডিও বানাতে। শুটিং করতে গিয়ে দেখে লাউ নাই। বাধ্য হয়ে সে ঘোষণা দিছে, যে যে লাউ নিয়ে আসতে পারবে তাদের সবাইকে এক হাজার টাকা করে দেওয়া হবে। এই ঘোষণা শুনে লোকজন এদিক-ওদিক খুঁজে লাউ জোগাড় করে হাজির। এখন পরিচালক বসছে লাউয়ের বিনিময়ে টাকা দিতে। লাউ নিয়ে অনেকেই চলে আসায় সবাইকে লাইন করে দাঁড়িয়ে একজন একজন করে আসতে বলছে।
এখন সেই পরিচালকের জন্য লাউ কিউ (lauQueue) নামে একটা কিউ ডাটা স্ট্রাকচার ডিক্লেয়ার কর। সেখানে 5 জনকে যোগ করে লাউ কিউ আউটপুট হিসেবে দেখা। তারপর সেখান থেকে একজনকে বের করে আবার আউটপুট হিসেবে দেখা।
উত্তর :
…ওপরের লাউ কিউতে দাঁড়িয়ে www.habluderAdda.com/bolod/queue.html-এ চলে যা। সেখানে তোর দুলাভাই ফিলিপস বাত্তির নিচে ইলিশ মাছ খাইতে খাইতে জিজ্ঞেস করবে, ও হাবলু, কোন কিউতে দাঁড়াইলি? তখন কদু মার্কা হাসি দিয়ে বলবি, মাছের কাঁটা খাইলে মিউ, লাইনে দাঁড়াইলে কিউ।
ঝংকার মাহবুবের অন্যান্য লেখা সম্পর্কে জানতে চলে যাও এই লিংকে!
ঝংকার মাহবুবকে ফলো করতে পারো ফেসবুক পেইজেও!
১০ মিনিট স্কুলের ব্লগের জন্য কোনো লেখা পাঠাতে চাইলে, সরাসরি তোমার লেখাটি ই-মেইল কর এই ঠিকানায়: write@10minuteschool.com
আপনার কমেন্ট লিখুন