Introduction: এই ভিডিওটিতে জনপ্রিয় ইনস্ট্রাক্টর শ্রদ্ধা খাপরা (Shradha Khapra) চমৎকারভাবে Stack (স্ট্যাক) ডেটা স্ট্রাকচার নিয়ে আলোচনা করেছেন। স্ট্যাক কী, এটি কীভাবে কাজ করে এবং কীভাবে কোডিং এর মাধ্যমে একে তৈরি করা যায়—এই সব কিছুই খুব সহজভাবে বোঝানো হয়েছে। যারা প্রোগ্রামিং শিখছেন বা ইন্টারভিউয়ের প্রস্তুতি নিচ্ছেন, তাদের জন্য এই টিউটোরিয়ালটি খুবই গুরুত্বপূর্ণ।
১. স্ট্যাক কী? (Introduction to Stack)
ভিডিও লিংক: [00:04]
স্ট্যাক হলো এমন একটি ডেটা স্ট্রাকচার যা মূলত একটি বালতি বা বইয়ের থাকের মতো কাজ করে। এটি LIFO (Last In First Out) নীতি মেনে চলে। তার মানে হলো, যে জিনিসটি আপনি সবার শেষে রাখবেন, সেটিই সবার আগে বের করতে পারবেন।
- সহজ উদাহরণ: আপনি যদি একটার ওপর একটা ৫টি বই রাখেন, তবে সবচেয়ে ওপরের বইটি (যা সবার শেষে রাখা হয়েছে) আপনাকে আগে সরাতে হবে। এটিই হলো স্ট্যাকের মূল মন্ত্র।
কঠিন শব্দ ও ব্যাখ্যা:
-
LIFO (Last In First Out): এটি একটি নিয়ম যেখানে শেষ আসা জিনিস আগে যায়।
-
Visualize (ভিজুয়ালাইজ): মনে মনে একটি ছবি বা ধারণা তৈরি করা।
২. স্ট্যাকের প্রধান কাজসমূহ (Operations of Stack)
ভিডিও লিংক: [03:56]
একটি স্ট্যাকে মূলত ৩টি গুরুত্বপূর্ণ কাজ করা হয়:
-
Push (পুশ): স্ট্যাকের ওপরের দিকে নতুন কোনো ডেটা রাখা।
-
Pop (পপ): স্ট্যাকের একদম ওপরের ডেটাটিকে সরিয়ে ফেলা।
-
Top (টপ): স্ট্যাকের সবশেষে বা ওপরে কোন ডেটা আছে তা দেখা।
আমার চিন্তা: এই তিনটি কাজই খুব দ্রুত হয় (Constant Time বা O(1)), যার মানে হলো ডেটা সংখ্যা যাই হোক না কেন, এগুলো করতে সবসময় একই সময় লাগে।
৩. ভেক্টর ব্যবহার করে স্ট্যাক তৈরি (Implementation using Vector)
ভিডিও লিংক: [05:13]
সি++ (C++) এ ভেক্টর ব্যবহার করে খুব সহজেই স্ট্যাক বানানো যায়। ভেক্টরের শেষে ডেটা ঢোকানো (Push Back) এবং শেষ থেকে ডেটা বের করা (Pop Back) খুবই সহজ।
কোড উদাহরণ:
C++
#include <iostream>
#include <vector>
using namespace std;
class Stack {
vector<int> v;
public:
void push(int val) {
v.push_back(val); // স্ট্যাকের শেষে ডেটা রাখা
}
void pop() {
v.pop_back(); // স্ট্যাকের শেষ থেকে ডেটা সরানো
}
int top() {
return v[v.size() - 1]; // ওপরের ডেটাটি দেখা
}
bool empty() {
return v.size() == 0; // স্ট্যাক খালি কি না যাচাই
}
};
ব্যাখ্যা: এখানে আমরা একটি class তৈরি করেছি যা ইন্টারনালি একটি vector ব্যবহার করে স্ট্যাকের মতো আচরণ করছে। push_back করলে তা টপে জমা হয়।
৪. লিঙ্কড লিস্ট ব্যবহার করে স্ট্যাক তৈরি (Implementation using Linked List)
ভিডিও লিংক: [14:34]
লিঙ্কড লিস্ট ব্যবহার করার সুবিধা হলো এতে মেমরির কোনো নির্দিষ্ট সীমা নেই। এখানে স্ট্যাকের 'টপ' কে লিঙ্কড লিস্টের 'হেড' (Head) হিসেবে ধরা হয়। যখনই নতুন কিছু পুশ করা হয়, তা তালিকার একদম শুরুতে যোগ করা হয়।
৫. C++ STL ব্যবহার করা (Using C++ STL Stack)
ভিডিও লিংক: [20:22]
বাস্তব জীবনে বা কোডিং প্রতিযোগিতায় আমাদের নিজে থেকে স্ট্যাক ক্লাস লিখতে হয় না। C++ এ আগে থেকেই তৈরি করা স্ট্যাক লাইব্রেরি আছে।
C++
#include <iostream>
#include <stack> // স্ট্যাক লাইব্রেরি
using namespace std;
int main() {
stack<int> s;
s.push(10);
s.push(20);
cout << "Top element: " << s.top() << endl; // আউটপুট আসবে ২০
return 0;
}
ব্যাখ্যা: শুধু #include <stack> লিখে আমরা সরাসরি পুশ, পপ এবং টপ ফাংশনগুলো ব্যবহার করতে পারি। এটি অনেক সময় বাঁচায়।
এনালাইসিস ও আমার মতামত:
কন্টেন্ট ক্রিয়েটর শ্রদ্ধা খাপরা স্ট্যাকের বেসিক কনসেপ্টগুলো খুব সুন্দরভাবে ক্লিয়ার করেছেন। বিশেষ করে রিকারশন (Recursion) এর সাথে স্ট্যাকের যে সম্পর্ক, সেটি শুরুতেই বলায় বিষয়টি বুঝতে সুবিধা হয়েছে।
বাস্তব প্রেক্ষাপট ও সম্ভাবনা:
-
কোথায় কাজে লাগে: ব্রাউজারের "Back" বাটন বা এডিটর এর "Undo" (Ctrl+Z) ফাংশন তৈরিতে স্ট্যাক ব্যবহার করা হয়।
-
বিকল্প: কিছু ক্ষেত্রে স্ট্যাকের বদলে
DequeবাQueueব্যবহার করা হয়, তবে যেখানে শেষ আসা ডেটা আগে দরকার, সেখানে স্ট্যাকের কোনো বিকল্প নেই। -
পরামর্শ: নতুনদের জন্য পরামর্শ হলো, প্রথমে ভেক্টর দিয়ে নিজে স্ট্যাক তৈরি করার চেষ্টা করুন, এতে লজিক পরিষ্কার হবে। এরপর STL ব্যবহার করা শুরু করুন।
সহজ শব্দ সংক্ষেপ:
-
Vector (ভেক্টর): এটি একটি ডাইনামিক অ্যারে যা নিজের আকার বাড়াতে বা কমাতে পারে।
-
STL (Standard Template Library): সি++ এর একটি ভাণ্ডার যেখানে আগে থেকেই অনেক কোড লিখে রাখা আছে আমাদের ব্যবহারের জন্য।
[
Introduction to STACKS | Data Structures & Algorithms | Lecture 66
Shradha Khapra · 302K views
](http://www.youtube.com/watch?v=0X-fV-1ir9c)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d