ডেটা স্ট্রাকচার হলো মেমরিতে ডেটা সংরক্ষণের এমন একটি সুনির্দিষ্ট গাণিতিক ও যৌক্তিক বিন্যাস যা ব্যবহার করে ডেটার উপর বিভিন্ন ক্রিয়াকলাপ দ্রুত ও দক্ষতার সাথে সম্পাদন করা যায়। প্রোগ্রামিংয়ে শুধুমাত্র কোড বা অ্যালগরিদম লিখলেই চলে না, অ্যালগরিদমের কার্যক্ষমতা সম্পূর্ণভাবে নির্ভর করে উপযুক্ত ডেটা কাঠামোর উপর।
সঠিক ডেটা স্ট্রাকচার নির্বাচনের তিনটি প্রধান শর্ত: (১) ডেটার পরিমাণ ও তাদের অভ্যন্তরীণ সম্পর্ক, (২) মৌলিক অপারেশনগুলোর পুনরাবৃত্তির হার (যেমন অনুসন্ধান, সন্নিবেশ, মোচন), এবং (৩) সিস্টেম রিসোর্সের সীমাবদ্ধতা (সিপিইউ সময় ও মেমরির ব্যবহার)।
ডেটা স্ট্রাকচারকে মূলত দুটি স্তরে বিভক্ত করা হয়:
- প্রিমিটিভ ডেটা স্ট্রাকচার: যেসব মৌলিক ডেটা টাইপ সরাসরি কম্পিউটার হার্ডওয়্যার ও মেশিন নির্দেশনা দ্বারা সমর্থিত। যেমন C ভাষায়
int,float,char,doubleএবং পয়েন্টার মেমরি অ্যাড্রেস। এরা প্রতিটি মুহূর্তে একটিমাত্র পরমাণবিক (atomic) মান ধারণ করে। - নন-প্রিমিটিভ ডেটা স্ট্রাকচার: একাধিক সমজাতীয় বা অসমজাতীয় ডেটা উপাদান সুসংগঠিত করার জন্য প্রিমিটিভ টাইপ থেকে উদ্ভূত জটিল কাঠামো। এগুলোকে আবার দুই ভাগে ভাগ করা হয়:
| শ্রেণিবিভাগ | কাঠামোগত বৈশিষ্ট্য | বাস্তব উদাহরণ | ট্রাভার্সাল পদ্ধতি |
|---|---|---|---|
| লিনিয়ার ডেটা স্ট্রাকচার | উপাদানগুলো একক অনুক্রমিক ধারায় সজ্জিত থাকে; প্রতিটি উপাদানের একটি নির্দিষ্ট পূর্বসূরি ও উত্তরসূরি থাকে। | অ্যারে, স্ট্যাক, কিউ, লিঙ্কড লিস্ট | একটিমাত্র রৈখিক পাসে সমস্ত উপাদান $O(n)$ সময়ে পরিদর্শন করা যায়। |
| নন-লিনিয়ার ডেটা স্ট্রাকচার | উপাদানগুলো অনুক্রমিকভাবে না থেকে হায়ারারকিক্যাল বা বহু-শাখা নেটওয়ার্ক হিসেবে থাকে। | ট্রি (বাইনারি ট্রি, BST), গ্রাফ | জটিল বহু-শাখা ট্রাভার্সাল (DFS, BFS, ইনঅর্ডার, প্রিঅর্ডার)। |
| স্ট্যাটিক ডেটা কাঠামো | কম্পাইল টাইমে মেমরি নির্দিষ্ট হয়ে যায়; রানটাইমে মেমরির আকার ছোট বা বড় করা যায় না। | স্থির আকারের অ্যারে | স্ট্যাক বা ডেটা সেগমেন্টে মেমরি বরাদ্দ থাকে। |
| ডায়নামিক ডেটা কাঠামো | প্রোগ্রাম চলার সময় রানটাইমে হিপ মেমরি থেকে পয়েন্টার দ্বারা মেমরি যুক্ত ও মুক্ত করা যায়। | লিঙ্কড লিস্ট, ডায়নামিক স্ট্যাক/ট্রি | malloc() ও free() দ্বারা প্রয়োজনমতো বাড়ে ও কমে। |
যেকোনো ডেটা স্ট্রাকচারের উপর প্রধান ছয়টি অপারেশন পরিচালিত হয়:
- ট্রাভার্সিং (Traversing): কাঠামোর প্রতিটি উপাদানকে অন্তত একবার পরিদর্শন ও প্রক্রিয়াকরণ করা (যেমন প্রিন্ট করা বা যোগফল নির্ণয়)।
- ইনসার্শন (Insertion): ডেটা স্ট্রাকচারের নির্দিষ্ট অবস্থানে একটি নতুন ডেটা উপাদান যুক্ত করা।
- ডিলিশন (Deletion): ডেটা স্ট্রাকচার থেকে কোনো বিদ্যমান উপাদান অপসারণ করা।
- সার্চিং (Searching): প্রদত্ত টার্গেট কি-এর মান অনুসারে কোনো উপাদানের উপস্থিতি বা মেমরি অবস্থান খুঁজে বের করা (লিনিয়ার ও বাইনারি সার্চ)।
- সর্টিং (Sorting): উপাদানগুলোকে কোনো নির্দিষ্ট যৌক্তিক ক্রমে (ঊর্ধ্বক্রম বা নিম্নক্রম) সাজানো (বাবল, সিলেকশন, ইনসার্শন সর্ট)।
- মার্জিং (Merging): দুটি ভিন্ন সাজানো ডেটা তালিকাকে একত্রিত করে একটি একক সাজানো তালিকা তৈরি করা।