Data Structure (ডাটা স্ট্রাকচার) হলো একটি নির্দিষ্ট উপায়ে data সংরক্ষণ (store), সংগঠিত (organize) এবং পরিচালনা (manage) করার পদ্ধতি, যাতে করে সেই data-তে কার্যকরভাবে access এবং modification করা যায়।
Data Structure এর উদ্দেশ্য:
- Efficiency – data দ্রুত খুঁজে পাওয়া, পরিবর্তন করা, যোগ করা বা মুছে ফেলার জন্য।
- Reusability – একবার তৈরি করলে অনেক জায়গায় ব্যবহার করা যায়।
- Organization – বিশৃঙ্খল তথ্যকে একটি গঠিত ও কাঠামোবদ্ধ রূপে রূপান্তর করা।
Data Structure এর প্রকারভেদ:
1. Linear Data Structure
যেখানে উপাদানগুলি (elements) একটানা লাইন বা ধারাবাহিকভাবে সাজানো থাকে।
- Array – একই ধরনের data ধারাবাহিকভাবে সংরক্ষণ করে।
- Linked List – প্রতিটি element একটি pointer ধারণ করে যা পরবর্তী element এর দিকে নির্দেশ করে।
- Stack – LIFO (Last In First Out) ভিত্তিতে কাজ করে।
- Queue – FIFO (First In First Out) ভিত্তিতে কাজ করে।
2.Non-Linear Data Structure
যেখানে উপাদানগুলি শাখা-প্রশাখা আকারে বা গাছের মতো গঠিত হয়।
- Tree – hierarchical structure; যেমন Binary Tree, Binary Search Tree।
- Graph – node এবং edge নিয়ে গঠিত; ব্যবহার হয় network-এর জন্য।
উদাহরণ:
- যদি তোমার কাছে ১০০ জন ছাত্রের নাম থাকে, তখন Array ব্যবহার করে তুমি তাদের নাম ধারাবাহিকভাবে রাখতে পারো।
- যদি ডিরেক্টরি বা ফোল্ডার স্ট্রাকচার দেখতে চাও, সেটা Tree structure-এর উদাহরণ।
বাস্তব জীবনে ব্যবহার:
- Database indexing (Tree)
- Undo operation in software (Stack)
- Task scheduling (Queue)
- Maps, GPS navigation (Graph)
Linear Data Structure (লিনিয়ার ডাটা স্ট্রাকচার)
Linear Data Structure হলো সেই ধরনের data structure যেখানে উপাদানগুলো (elements) একটির পর একটি ধারাবাহিকভাবে সাজানো থাকে, অর্থাৎ প্রতিটি element-এর শুধুমাত্র পরবর্তী এবং পূর্ববর্তী element-এর সঙ্গে সম্পর্ক থাকে (যদি থাকে)।
উদাহরণ:
- Array
- একই ধরনের data ধারাবাহিকভাবে সংরক্ষণ করে।
- নির্দিষ্ট index-এর মাধ্যমে access করা যায়।
- Linked List
- প্রতিটি node data এবং একটি pointer ধারণ করে যা পরবর্তী node-এর দিকে নির্দেশ করে।
- Stack
- LIFO (Last In First Out) পদ্ধতিতে কাজ করে।
- যেমন: plate এর stack – উপরেরটা আগে উঠবে।
- Queue
- FIFO (First In First Out) পদ্ধতিতে কাজ করে।
- যেমন: লাইনে দাঁড়িয়ে থাকা – যে আগে আসবে, সে আগে যাবে।
Non-Linear Data Structure (নন-লিনিয়ার ডাটা স্ট্রাকচার)
Non-Linear Data Structure হলো এমন এক ধরনের গঠন যেখানে একটি উপাদান একাধিক উপাদানের সাথে সম্পর্কিত হতে পারে, এবং এটি গাছ বা গ্রাফের মতো গঠিত হয়। এই ধরনের data structure-এ traversal বা খোঁজা একটু জটিল হয়।
উদাহরণ:
- Tree
- Hierarchical structure (like family tree)।
- Binary Tree, Binary Search Tree, AVL Tree ইত্যাদি এর উদাহরণ।
- Graph
- Node (vertex) এবং Edge নিয়ে গঠিত।
- একাধিক node একে অপরের সাথে সংযুক্ত থাকে।
- Directed বা Undirected, এবং Weighted বা Un weighted হতে পারে।
তুলনামূলক পার্থক্য:
বৈশিষ্ট্য | Linear Data Structure | Non-Linear Data Structure |
Structure | Sequential | Hierarchical বা Interconnected |
Memory ব্যবহার | Contiguous বা sequential | Random |
Traversal | সহজ | জটিল |
উদাহরণ | Array, Stack, Queue | Tree, Graph |
Array (অ্যারে) কী?
Array হলো একটি Linear Data Structure যেখানে একই ধরনের (same data type) একাধিক element ধারাবাহিকভাবে একটি নির্দিষ্ট memory location-এ সংরক্ষণ করা হয়। প্রতিটি element-এর একটি নির্দিষ্ট index থাকে, যার মাধ্যমে সেই element-এ access করা যায়।
1D Array (One-Dimensional Array)
এটি সবচেয়ে সাধারণ Array, যেখানে data একটি সরল লাইনে সাজানো থাকে।
গঠন:
int marks[5] = {90, 85, 70, 88, 92};
এখানে marks নামের array-তে ৫টি integer value সংরক্ষিত আছে।
ব্যবহার:
- Student-দের marks list সংরক্ষণ
- Temperature বা sensor readings
- Simple lookup table
- Data sorting ও searching algorithms (যেমন: Bubble Sort, Linear Search)
2D Array (Two-Dimensional Array)
এটি একটি array of arrays, যেখানে data row ও column আকারে সাজানো থাকে, ঠিক একটি table বা matrix-এর মতো।
গঠন:
int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
এখানে matrix একটি ৩x৩ two-dimensional array।
ব্যবহার:
- Matrix operation (addition, multiplication)
- Game board design (যেমন: Tic-Tac-Toe)
- Image processing (pixel values 2D array-তে থাকে)
- Graph representation using adjacency matrix
তুলনামূলক চিত্র:
বৈশিষ্ট্য | 1D Array | 2D Array |
Structure | Single line | Table/Matrix form |
Access format | arr[i] | arr[i][j] |
Complexity | সহজ | তুলনামূলক জটিল |
ব্যবহার | Simple data list | Grid বা Matrix সম্পর্কিত সমস্যা |
Linked List (লিঙ্কড লিস্ট) কী?
Linked List হলো একটি Linear Data Structure যেখানে প্রতিটি উপাদান (যাকে node বলা হয়) দুটি অংশ নিয়ে গঠিত:
- Data – যেখানে তথ্য সংরক্ষণ করা হয়।
- Pointer – যা পরবর্তী node-এর ঠিকানা ধরে রাখে।
Array-এর মতো contiguous memory ব্যবহারের বদলে, Linked List প্রতিটি node-কে আলাদাভাবে সংযুক্ত করে।
- Singly Linked List
এই ধরনের Linked List-এ প্রতিটি node শুধু পরবর্তী node-এর ঠিকানা ধারণ করে, অর্থাৎ শুধু next pointer থাকে।
Structure:
বৈশিষ্ট্য:
- একদিকে traversal করা যায় (forward only)
- memory allocation dynamic
- insertion ও deletion তুলনামূলক সহজ (array-এর তুলনায়)
- Doubly Linked List
এই ধরনের Linked List-এ প্রতিটি node-এ দুটি pointer থাকে: একটি next pointer এবং একটি previous pointer।
Structure:
NULL ← [Prev | Data | Next] ↔ [Prev | Data | Next] ↔ [Prev | Data | Next] → NULL
বৈশিষ্ট্য:
- দুই দিকে traversal সম্ভব (forward & backward)
- insertion ও deletion আরও সহজ, বিশেষ করে মাঝখানে
- ব্যবহারে বেশি memory লাগে (কারণ দুইটি pointer)
- Circular Linked List
এই ধরনের Linked List-এ শেষ node-এর pointer প্রথম node-এর দিকে নির্দেশ করে, ফলে এটি একটি বৃত্ত (loop) তৈরি করে।
দুই রকম হতে পারে:
- Singly Circular Linked List: শেষ node-এর next pointer প্রথম node-কে নির্দেশ করে।
- Doubly Circular Linked List: শেষ node-এর next pointer প্রথম node-এ এবং প্রথম node-এর prev pointer শেষ node-এ।
Structure (Singly Circular):
বৈশিষ্ট্য:
- কোনো নির্দিষ্ট node থেকে শুরু করে লুপ করে traversal করা যায়
- Real-time applications-এ ব্যবহৃত হয় (যেমন: task scheduling, music playlist)
তুলনামূলক টেবিল:
বৈশিষ্ট্য | Singly Linked List | Doubly Linked List | Circular Linked List |
Traversal | একদিকে | দুইদিকে | এক বা দুইদিকে (loop) |
Memory usage | কম | বেশি (due to two pointers) | মাঝারি বা বেশি |
Structure সহজতা | সহজ | মাঝারি | একটু জটিল |
Practical Use | Stack, Queue | Browser history, Undo | Scheduling, Playlists |