আপডেট

Tuesday, March 17, 2015

Introduction to stack


স্ট্যাকের নাম শুনলেই একটা কমন প্রশ্ন মাথায় ভেসে উঠে স্ট্যাক আসলে কি? এইটা দিয়ে কি করে ? খায় নাকি মাথায় দেয় :p শুধু স্ট্যাক কেন; যেকোন কিছু  শুনলেই প্রত্যেক মানুষের মনে স্বভাবতই একটা প্রশ্ন তৈরী হয় আসলে জিনিসটা কি, কেন জানতে হবে,কি কাজে ব্যাবহার করা হয়! ইত্যাদি ইত্যাদি! সেসব নিয়েই আলোচনা হবে আজ । 
ইংরেজি stack শব্দের অর্থ স্তুপ!  উইকিপিডিয়া অনুযায়ী  স্ট্যাকের সংজ্ঞাঃ
In computer science, a stack or LIFO (last in, first out) is an abstract data type that serves as a collection of elements, with two principal operations: push adds an element to the collection; pop removes the last element that was added.

আমরা জানি মেমরি চারটি সেকশনে ভাগ করাঃ 
১। code(text) সেকশনঃ  যে অংশে ব্যাবহারকারীর লেখা কোড সংরক্ষন করা হয়। 
২। static(global variable) সেকশনঃ  এ অংশে সকল গ্লোবাল ভেরিয়েবল সংরক্ষন করা থাকে। 
৩। stack সেকশনঃ  এখানে সকল ফাংশন এবং সে ফাংশনের ভেতর থাকা সকল ভেরিয়েবল। 
৪। heap সেকশনঃ  এবং সবশেষে heap সেকশন।
মেমরির ভিবিন্ন অংশ 
প্রত্যেকটি সেকশনের কাজের ধরণ ভিন্ন। স্ট্যাক নিয়ে আলোচনার পূর্বে একটা জিনিস ক্লিয়ার করা দরকার। ধরুন আপনার বাসায় সাতটি চেয়ার আছে। প্রথম চেয়ারটি রাখলেন, তারপউপর দ্বিতীয় চেয়ারটি,তারপর তৃতীয় চেয়ারটি এবং তারপর  চতুর্থ চেয়ার,এরপর যথাক্রমে পঞ্চম , ষষ্ঠ এবং সপ্তম! অতঃপর চেয়ারের একটি স্তুপ তৈরী হল। এখন আপনাকে যদি চেয়ারগুলো স্তুপ থেকে আলাদা করতে বলা হয়  তাহলে আপনি কি করবেন? আপনাকে নিশ্চয়ই প্রথমে সাত নাম্বার চেয়ারটা তুলতে হবে তারপর ছয় নাম্বার তারপর পাঁচ নাম্বার  নাম্বার এভাবে সবশেষে এক নাম্বারটা তুলতে হবে। লক্ষ্য করবেন আপনি ১ নাম্বার চেয়ারটি  প্রথমে দিয়েছিলেন তা তুলতে হল শেষে এবং ৭ নাম্বার চেয়ারটি শেষে দিলেন তা তুলতে হলো প্রথমে। এখানে চেয়ারের স্তুপ এক ধরনের স্ট্যাক। 
চেয়ারের স্ট্যাক 
আবার আপনাকে যদি বলা হয়; হে, আমি তোমাকে একটি বক্স দিলাম যার মধ্যে তোমাকে বই রাখতে হবে। আপনি এক এক করে বই রাখলেন এবং যখন আপনাকে তুলতে বলা হয় আপনাকে এক এক করেই তুলতে হবে। খেয়াল করুন এখানেও যা শেষে রেখেছিলেন তা প্রথমে তুলতে হচ্ছে এবং যা শেষে দিয়েছিলেন তা প্রথম রাখলেন তা শেষে তুলতে হচ্ছে। এখানে বইয়ের স্তুপ এক ধরনের স্ট্যাক। 

প্রশ্ন হতে পারে এরকম হওয়ার কারন কি ! এরকম হওয়ার কারন হল, আমরা ইনপুট এবং আউটপুটের জন্য শুধু একটা পথ পাচ্ছি!

#লক্ষনীয়ঃ 
○ এই প্রকৃয়াকে বলা হয় LIFO or last in first out 
○ ইনপুট দেওয়াকে বলা হয় push 
○ বের করে আনাকে বলা হয় pop 
○ যে বিন্দুতে গিয়ে ইনপুট নেওয়া বন্ধ হয় তাকে বলা হয় top 

#স্ট্যাক ডাটা স্ট্রাকচারের প্রয়োগঃ  
1. parsing 
2. Recursive function 
3. Calling function 
4. Expression Evaluation
○ infix to Postfix 
○ Infix to prefix 
○ postfix to infix 
○ prefix to infix
5. Page visited history in a web browser(back button) 
6. Matching tag HTML and xml 
7. Undo sequence in a text editor 


#Implementation of stack: স্ট্যাকের দুই ধরনের implementation আছে। এক. অ্যারে বেসড ইমপ্লিমেন্টেশন
দুই. লিঙ্ক লিস্ট ইমপ্লিমেন্টেশন! পরবর্তীতে আমরা অ্যারে বেসড ইমপ্লিমেন্টেশন সম্পর্কে জানবো! আজ এ পর্যন্তই! ধন্যবাদ :)