সরাসরি প্রধান সামগ্রীতে চলে যান

সহজ ভাষায় Stack ডেটা স্ট্রাকচার এর আদ্যোপান্ত

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]

একটি স্ট্যাকে মূলত ৩টি গুরুত্বপূর্ণ কাজ করা হয়:

  1. Push (পুশ): স্ট্যাকের ওপরের দিকে নতুন কোনো ডেটা রাখা।

  2. Pop (পপ): স্ট্যাকের একদম ওপরের ডেটাটিকে সরিয়ে ফেলা।

  3. 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)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প

Introduction এই ভিডিওর নির্দিষ্ট অংশে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার নতুন ফিচারগুলো তৈরি হয় এবং এতে সাধারণ ডেভেলপারদের মতামতের গুরুত্ব কতটুকু। বিশেষ করে Structured Concurrency -এর মতো জটিল ফিচারগুলো কেন বারবার 'Preview' অবস্থায় থাকে এবং কীভাবে কমিউনিটির ফিডব্যাক সেই ফিচারগুলোকে আরও নিখুঁত করতে সাহায্য করে, তা এখানে সহজভাবে বোঝানো হয়েছে। ১. ভালো ফিডব্যাক আসলে কী? ভিডিও রেফারেন্স: [ 34:53 ] ব্রায়ান গোয়েটজ বলছেন যে, জাভা টিম যখন কোনো নতুন ফিচারের খসড়া (Draft) বা প্রস্তাব (JEP) প্রকাশ করে, তখন তারা এমন কিছু জানতে চায় যা তারা নিজেরা আগে ভাবেনি। বিস্তারিত: একজন ডেভেলপার হিসেবে আমরা যখন কোনো নতুন ফিচার দেখি, আমাদের প্রথম প্রতিক্রিয়া হয় সেটার Syntax বা লেখার ধরন নিয়ে। কিন্তু ব্রায়ানের মতে, "এই লেখাটা কেন এমন হলো?" বা "এটা কোটলিন বা স্কালা-র মতো কেন নয়?"—এই ধরনের ফিডব্যাক খুব একটা কাজে আসে না। আসল দামী ফিডব্যাক হলো সেইটা, যা নতুন কোনো বাস্তব সমস্যা (Edge Case) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...

[Master Post] Machine Learning for Everybody – Full Course

URL: https://youtu.be/i_LwzRVP7bg?t=0 Title: Machine Learning for Everybody – Full Course Topics:- মেশিন লার্নিংয়ের হাতেখড়ি এবং গুগল কোল্যাব সেটআপ মেশিন লার্নিংয়ের খুঁটিনাটি ও ফিচারের সহজ পাঠ Classification বনাম Regression এবং মডেল ট্রেনিংয়ের সহজ পাঠ মেশিন লার্নিংয়ের জন্য ডেটা তৈরি এবং প্রসেসিং করার সহজ গাইড K-Nearest Neighbors (KNN) থিওরির সহজ পাঠ কে-নিয়ারেস্ট নেইবারস (KNN) ইমপ্লিমেন্টেশন সহজ বাংলায় নেইভ বেইজ থিওরি এবং এর প্রয়োগ: সহজ পাঠ লজিস্টিক রিগ্রেশন: থিওরি ও ইমপ্লিমেন্টেশন SVM থিওরি এবং ইমপ্লিমেন্টেশন সহজ পাঠ নিউরাল নেটওয়ার্ক এবং টেনসরফ্লোর সহজ পাঠ টেনসরফ্লো দিয়ে নিউরাল নেটওয়ার্ক ক্লাসিফিকেশন শেখার সহজ গাইড লিনিয়ার রিগ্রেশন: সহজ কথায় মূল ধারণা ও গণিত লিনিয়ার রিগ্রেশন: সহজ ভাষায় খুঁটিনাটি ও হাতে-কলমে শেখা লিনিয়ার রিগ্রেশন এবং নিউরন মডেলের সহজ পাঠ TensorFlow দিয়ে রিগ্রেশন নিউরাল নেটওয়ার্ক তৈরি - পার্ট ১ টেনসরফ্লো দিয়ে রিগ্রেশন নিউরাল নেটওয়ার্ক তৈরি - পার্ট ২ আনসুপারভাইজড লার্নিং: কে-মিনস ক্লাস্টারিংয়ের সহজ পাঠ Principal C...