এই লেখাটি নেয়া হয়েছে “আদর্শ” থেকে প্রকাশিত এবং ঝংকার মাহবুব লিখিত ২য় বই “প্রোগ্রামিংয়ের বলদ টু বস” বই থেকে।
রাশেদ অলস হলেও বুদ্ধিমান অলস। চিন্তা করে করে বুদ্ধি বের করতে পছন্দ করে সে। যাতে আলসেমি করে সময় বা টাকা সেভ করতে পারে। এ রকম চিন্তা করতে করতে একদিন বুঝতে পারল, দুনিয়াতে যে জিনিসটাই ইন্টারেস্টিং বা কুল, সেটাই তার সময়, না হয় পকেটের টাকা কেড়ে নিতে চায়। এমনকি যে বিশ্বসেরা ফুটবলারের ফ্যান সে, সেই ফুটবলারও রাস্তার পাশের বিলবোর্ডে দাঁড়িয়ে তাকে দিয়ে তেল, শ্যাম্পু, শেভিং ক্রিম কেনাতে চায়। যাতে সেই সব জিনিস কেনার টাকা ইনডাইরেক্টলি স্পনসরশিপের টাকা হয়ে সেই ফুটবলারের পকেটে ঢুকে যেতে পারে।
| stack | stack এর প্রোগ্রামিং | LIFO |
খড়ের stack-এ মারে গুঁতা
শীতের সকাল। বারান্দায় দাঁড়িয়ে রোদ পোহাচ্ছে অন্তু। রোদের মধ্যে দাঁড়িয়ে থাকলেও জামা-সোয়েটার গায়ে দিয়ে আছে সে। পাশে বসে আছে রাশেদ। কিছুক্ষণ চুপচাপ থাকার পর রাশেদ বলতে শুরু করল, শীতের দিনে কত-কী গায়ে দেওয়া লাগে। জ্যাকেট, সোয়েটার, চাদর, মাফলার, কানটুপি, মানকি টুপি, আরও কত-কী!
এসব শীতের জামাকাপড় গায়ে দেওয়ার সময় তুই প্রথমেই স্যান্ডো গেঞ্জি গায়ে দিছস, তারপর গেঞ্জির ওপরে শার্ট, শার্টের ওপরে সোয়েটার। তাতেও ঠান্ডা লাগা না কমায় সোয়েটারের ওপর জ্যাকেট। জ্যাকেটের ওপর চাদর গায়ে দিছস।
এগুলা খোলার সময় কেমনে খুলবি? সব তো একসাথে খুলতে পারবি না; বরং ভদ্র বাচ্চার মতো, প্রথমেই সবার ওপরের চাদর খুলবি। চাদর খোলার পর চাদরের নিচের জ্যাকেট খুলবি। সেটা খোলা হয়ে গেলে তার নিচের সোয়েটার খুলবি। সোয়েটার খোলার পর শার্ট। শার্ট খোলার পর গেঞ্জি খুলবি।
সোনালি ধান, বাংলার প্রাণ
ধানমাড়াইয়ের কথা মনে আছে? জমি থেকে ধান কেটে আনার পর ধানগাছ থেকে ধান আলাদা করার পদ্ধতিকে ধানমাড়াই করা বলে। ধানমাড়াই করার জন্য গ্রামগঞ্জে ধানমাড়াই করার মেশিন পাওয়া যায়।
এসব মেশিনের ওপর অনেকগুলা ধানগাছ একসাথে ধরে রাখলে, ধানগাছ থেকে ধান আলাদা হয়ে সামনে পড়ে যায়। ধানগাছ থেকে ধান আলাদা হয়ে গেলে, ধান ছাড়া গাছের যে বাকি অংশ থাকে, তাকে খড় বলে। এই খড় হচ্ছে গরুদের বিরিয়ানি। এই খড় দিয়ে গরুরা লাঞ্চ, ডিনার ও ব্রেকফাস্ট করে।
এখন গ্রামের উঠানে ধানমাড়াই করার একটা দৃশ্যের কথা চিন্তা কর। সেখানে একজন ডানপাশ থেকে এক গোছা ধানগাছ দিচ্ছে। আরেকজন ধানমাড়াই করার মেশিনে ধান আলাদা করে, খড় পেছনের দিকে ফেলতেছে। একই জায়গায় একটু পরপর খড় ফেলার কারণে খড়ের স্তূপ হয়ে যায়।
এই খড়ের স্তূপকে ভদ্র ভাষায় খড়ের গাদা বলে। খড়ের গাদাকে ইংরেজিতে haystack বলে। এই haystack শব্দটাকে দুইটা অংশে ভাগ করা যায়। একটা হচ্ছে hay আরেকটা হচ্ছে stack। ইংরেজি hay এর বাংলা মানে হচ্ছে খড়। আর ইংরেজি stack এর বাংলা মানে হচ্ছে স্তূপ বা গাদা।
গায়ে দিলাম খড়ের জামা, চলে যাও শীত মামা
খড় রাখার সিস্টেম অনেকটাই শীতের জামাকাপড় গায়ে দেওয়ার মতো। খড় রাখার সময়, আগে যেগুলা রাখা হইছে তার ওপর নতুনগুলা রাখে। শীতের জামাকাপড় গায়ে দেওয়ার সময়ও আগে যেগুলা গায়ে দিছস, সেগুলার ওপর নতুনগুলা গায়ে দিবি। অর্থাৎ যেগুলা অলরেডি গায়ে দেওয়া আছে, সেগুলার ওপর গায়ে দিবি। আবার খড়ের স্তূপ সরানোর সময় ওপরের খড়গুলা আগে সরায় তারপর একটু একটু করে নিচের খড়গুলা সরায়। জামাকাপড় খোলার সময়ও তুই ওপরের জামা আগে খুলে রাখস তারপর নিচেরগুলা খুলিস। সে জন্যই জামাকাপড় গায়ে দেওয়ার সিস্টেমটা অনেকটা খড় রাখার সিস্টেম বা haystack-এর মতো।
এখন যদি খড়ের গাদার সিস্টেমের মতো বা শীতের জামাকাপড় গায়ে দেওয়ার মতো করে কোথাও ডাটা রাখস। অর্থাৎ একটা ডাটার ওপর আরেকটা ডাটা রাখবি। আবার বের করার সময় সবার ওপরের ডাটা আগে বের করবি, তারপর তার নিচেরটা বের করবি। এই রকম সিস্টেমে ডাটা রাখলে সেটাকে haystack-এর নাম অনুসারে স্ট্যাক ডাটা স্ট্রাকচার (stack data structure) বলা হয়।
শীতের জামাকাপড় গায়ে দেওয়ার সময় যেসব জামাকাপড় গায়ে দিছিলি, সেগুলার একটা করে নাম আছে। যেমন : শার্ট (shirt) একটা জিনিসের নাম। এই নামটাকে একটা তথ্য বা ডাটা চিন্তা করতে পারিস। আবার সোয়েটার (sweater)-ও একটা জিনিসের নাম। সেটাও একটা ডাটা। এই ডাটাগুলা খুব সহজেই একটা স্ট্যাকে রাখা যায়।
Stack লিখতে নো মিসটেক
একটা array দিয়ে খুব সহজে স্ট্যাক ডাটা স্ট্রাকচার বানিয়ে ফেলা যায়। জাস্ট একটা array ডিক্লেয়ার করবি। শুরুতে তোর স্ট্যাকের ভিতরে কোনো উপাদান থাকবে না। তাই নামের পর সমান চিহ্ন দিয়ে দুইটা থার্ড ব্র্যাকেট দিয়ে দিবি। আর তুই যেহেতু শীতের জামাকাপড় গায়ে দেওয়ার স্ট্যাক বানাবি তাই winterClothes নাম দিলি।
var winterClothes = [ ];
কোনো একটা array-এর মধ্যে নতুন একটা উপাদান যোগ করার জন্য array-এর নামের পরে ডট চিহ্ন (.) দিয়ে push লিখতে হয়। তারপর যে নতুন উপাদানটা যোগ করতে চাস সেটা দুইটা প্রথম ব্র্যাকেটের ভিতরে লিখতে হয়। তুই যেহেতু স্ট্যাক বানানোর জন্য একটা array ডিক্লেয়ার করছস, তাই সেই স্ট্যাকের ভিতরে নতুন উপাদান যোগ করার জন্যও push ব্যবহার করা লাগবে।
শীতের জামাকাপড় গায়ে দেওয়া শুরু করলে তুই সবার আগে গেঞ্জি গায়ে দিবি। এই গেঞ্জি গায়ে দেওয়া মানে তোর winterClothes নামক শীতের জামাকাপড় গায়ে দেওয়ার স্ট্যাকের মধ্যে নতুন উপাদান যোগ করা। আর সেটা করার জন্য প্রথমেই স্ট্যাকের নাম লিখবি। অর্থাৎ winterClothes লিখবি। তারপর ডট (.) দিয়ে push লিখবি। আর তুই যেহেতু প্রথমেই গেঞ্জি গায়ে দিতাছস, তাই push লেখার পর দুইটা প্রথম ব্র্যাকেট দিয়ে ব্র্যাকেটের ভিতরে genji লিখে দিবি। নিচের মতো করে—
winterClothes.push(“genji”);
তাহলেই তোর winterClothes নামক স্ট্যাকের ভিতরে genji ঢুকে যাবে। গেঞ্জি গায়ে দেওয়ার পর তোকে এক এক করে শার্ট, সোয়েটার, জ্যাকট ও চাদর গায়ে দিতে হবে। তাই সিরিয়াল অনুসারে তোর স্ট্যাকের মধ্যে push করতে থাক।
winterClothes.push(“shirt”);
winterClothes.push(“sweater”);
winterClothes.push(“jacket”);
winterClothes.push(“chador”);
মোবাইল দিয়ে প্রোগ্রামিং
তোর একটা স্মার্টফোন থাকলেই কোডিং করতে পারবি। যেকোনো ওয়েবসাইটে যাওয়া যায় এমন একটা মোবাইল ফোন থাকলেই সেই ফোন দিয়ে কোডিং করার জন্য www.habluderadda.com/console-এ চলে যাবি। ওয়েবসাইট একবার লোড হওয়ার পর, ইন্টারনেট বা ডাটা কানেকশন বন্ধ করে দিলেও এই ওয়েবসাইটে কোডিং করতে পারবি। জাস্ট কোড লিখবি আর Run লেখা বাটনে চাপ দিবি। তাছাড়া ল্যাপটপ বা কম্পিউটারে ইন্টারনেট থাকলে সেটা দিয়েও www.habluderadda.com/console-এ গিয়ে কোডিং করতে পারবি।
এখন www.habluderadda.com/console এই ওয়েবলিংকে চলে যা। সেখানে winterClothes নামে স্ট্যাক ডিক্লেয়ার করবি। অন্তুর মতো তোর যা যা শীতের কাপড় আছে সব গায়ে দিবি। তারপর নিচের মতো console.log লিখে run বাটনে চাপ দিবি।
console.log(winterClothes);
তাহলে আউটপুট হিসেবে [“genji”, “shirt”, “sweater”, “jacket”, “chador”] দেখাবে। বাম থেকে ডানে খেয়াল করলেই বুঝতে পারবি তুই যে সিরিয়ালে জামাকাপড় গায়ে দিছিলি, সেই সিরিয়ালেই আউটপুট দেখাচ্ছে।
বেরিয়ে আয় শয়তান
ধর এইবার খুব বেশি শীত পড়ে নাই। তাই অনেকগুলা শীতের জামাকাপড় গায়ে দেওয়ায় তোর গরম লাগতেছে। সে জন্য তুই ঠিক করলি গায়ে থেকে চাদর খুলে ফেলবি। তোর winterClothes নামক স্ট্যাকের সবচেয়ে শেষ উপাদান হচ্ছে চাদর। এখন যদি স্ট্যাকের শেষ উপাদানটা বের করে ফেলতে চাস। তাহলে স্ট্যাকের নাম লিখে তারপর ডট চিহ্ন (.) দিয়ে pop() লিখতে হবে।
pop একটা ইংরেজি শব্দ। এইটার মানে ফটফট করে সাউন্ড হওয়া। কোনো একটা কোকের বোতল খুললে ফট করে যে সাউন্ড করে তাকেই pop বলে। আর কোকের বোতল খুললে বোতল থেকে কোক বেরিয়ে আসবে। একইভাবে মনে রাখতে পারস, স্ট্যাক থেকে pop করলে স্ট্যাকের সর্বশেষ উপাদানটা বেরিয়ে আসবে। তাই তোর winterClothes নামক স্ট্যাক থেকে সর্বশেষ উপাদান বের করে আনার জন্য নিচের মতো করে pop ব্যবহার কর।
winterClothes.pop();
একবার pop ব্যবহার করার পর তোর গায়ের ওপর থেকে চাদর চলে গেছে। এখন winterClothes-কে console.log করে দে নিচের মতো করে—
console.log(winterClothes);
আউটপুট হিসেবে [“genji”, “shirt”, “sweater”, “jacket”] পাওয়া যাবে। চাদর খুলে ফেলার পরেও তোর গরম লাগলে, তুই আরেকবার pop ব্যবহার করতে পারস। এখন তোর স্ট্যাকের সবার লাস্টে আছে জ্যাকেট। তাই এখন pop করলে জ্যাকেট বের হয়ে আসবে। তারপর আউটপুট দেখার জন্য console.log করে দে।
winterClothes.pop();
console.log(winterClothes);
এইবার আউটপুট হিসেবে [“genji”, “shirt”, “sweater”] দেখাবে। এইভাবে যতক্ষণ পর্যন্ত স্ট্যাকে উপাদান থাকবে, ততক্ষণ পর্যন্ত যতবার winterClothes.pop() লিখে কোড রান করবি, ততবার winterClothes স্ট্যাকের লাস্ট উপাদানটা বেরিয়ে আসবে। আর যতবার নতুন উপাদান push করবি, ততবার সেটা লাস্ট উপাদান হিসেবে যোগ হবে।
লিপু ভাইয়ের LIFO
ওপরের স্ট্যাক থেকে উপাদান বের করার সময় সবার শেষে যেটা গায়ে দিছস, সেটাই সবার আগে বের হয়ে আসছে। অর্থাৎ স্ট্যাকের মধ্যে সবার শেষে যেটাকে ঢোকানো হবে, সেটাকে সবার আগে বের করা হবে। এই সবার শেষে ঢোকানো জিনিসকে সবার আগে বের করাকে ইংরেজিতে Last in First Out বা সংক্ষেপে LIFO বলে। LIFO হচ্ছে Last in First Out-এর সবগুলা শব্দের প্রথম বর্ণ নিয়ে বানানো সংক্ষিপ্ত রূপ।
ভেটকি মাছ খায়, পরে না মাথায় দেয়
তুই বাজারে গেছস মাছ কিনতে। মাছের দাম দেখে তোর পুরাই মাথা নষ্ট। অনেক বলার পরেও মাছওয়ালা আংকেল ভেটকি মাছের দাম কমাচ্ছে না। তুইও দামাদামি থামাচ্ছস না। শেষমেশ উনি বিরক্ত হয়ে বললেন, স্ট্যাক কী জিনিস বলতে পারলে দাম কামাব। তখন তুই ভেটকি মার্কা হাসি দিয়ে বলবি, স্ট্যাক হচ্ছে এমন একটা ডাটা স্ট্রাকচার, যেটাতে পরে ঢুকলে আগে বের করে দেওয়া হয়। এত কিছু কঠিন মনে হলে বলে দিবি, স্ট্যাক হচ্ছে, শীতের জামাকাপড় গায়ে দেওয়ার সিস্টেম।
নিজে নিজে কর
২.১ : দোকানে পরোটা ভাজার পর পরোটা কীভাবে রাখে খেয়াল করছস? দেখবি নতুন একটা ভাজা হইলে, আগে যেগুলা ভাজা হইছিল, সেগুলার ওপরে নতুন যেটা ভাজা হইছে সেটা রাখে। আবার পরোটা নেওয়ার সময় সবার ওপরে যেটা আছে সেটা আগে নেয়। এখন এই পরোটা ভেজে রাখা আর নেওয়ার সাথে কোনো ডাটা স্ট্রাকচারের গন্ধ খুঁজে পাচ্ছস? পেলে সেটা কী?
উত্তর:
২.২ : তোর চারপাশ থেকে এমন একটা কিছু খুঁজে বের কর যেখানে সবার শেষে রাখলে সবার আগে নামানো হয়।
উত্তর :
২.৩ : ছোট বা মাঝারি সাইজের ট্রাকে গরু উঠাইতে দেখছস? ধর একটা ছোট ট্রাকে এক সারি গরু রাখা যায়। এখন সেই ট্রাকে গরু ওঠানো আর নামানোর কথা চিন্তা কর। দেখবি যে গরুকে সবার লাস্টে ওঠানো হয়, তাকে সবার আগে নামানো হয়। এখন ট্রাকে গরু ওঠানোর জন্য গরুর ট্রাক (gorurTruck) নামে একটা স্ট্যাক ডিক্লেয়ার কর। সেটাতে তিনটা গরু push করে স্ট্যাকটাকে আউটপুট হিসেবে দেখা। তারপর একটা গরু নামিয়ে আবার আউটপুট হিসেবে দেখা।
উত্তর :
… ওপরের গরু পরোটাওয়ালা প্রশ্ন দেখে তোর মাংস-রুটি, নান-শিক খাওয়ার জন্য মুখে লালা চলে আসলে জিহ্বা বের করে www.habluderAdda.com/bolod/stack.html-এ চলে যা। সেখানে বাংলা সিনেমার নায়ক এসে সব পরোটা নিয়ে যেতে চাইলে সিনেমার পুলিশের মতো বলবি, হ্যান্ডস আপ! পরোটার stack নিজের হাতে তুলে নেবেন না।
ঝংকার মাহবুবের অন্যান্য লেখা সম্পর্কে জানতে চলে যাও এই লিংকে!
ঝংকার মাহবুবকে ফলো করতে পারো ফেসবুক পেইজেও!
১০ মিনিট স্কুলের লাইভ এডমিশন কোচিং ক্লাসগুলো অনুসরণ করতে সরাসরি চলে যেতে পারো এই লিঙ্কে: www.10minuteschool.com/admissions/live/
১০ মিনিট স্কুলের ব্লগের জন্য কোনো লেখা পাঠাতে চাইলে, সরাসরি তোমার লেখাটি ই-মেইল কর এই ঠিকানায়: write@10minuteschool.com
আপনার কমেন্ট লিখুন