সি প্রোগ্রামিং ভাষায় উপাত্ত সংগঠন/সূচনা

প্রাথমিক মেমোরিতে (main memory) উপাত্ত সঞ্চয় করার বিভিন্ন উপায়কে উপাত্ত সংগঠন বা ডেটা স্ট্রাকচার (data structures) বলে। প্রাথমিক মেমোরি দুইপ্রকার: র‍্যান্ডম অ্যাকসেস মেমোরি (RAM) ও রিড-অনলি মেমোরি (ROM)। উপাত্ত সংগঠন মূলত দুইপ্রকার: রৈখিক (linear) ও অরৈখিক (non-linear)।

রৈখিক উপাত্ত সংগঠন

সম্পাদনা

এইধরনের উপাত্ত সংগঠনের উপাদানগুলো একটি অনুক্রম (sequence) গঠন করে, আর প্রতিটি উপাদানের একক পূর্বসূরী (predecessor) ও একক উত্তরসূরী (successor) রয়েছে। অ্যারে (array), লিঙ্কড লিস্ট (linked list), স্ট্যাক (stack) ও কিউ (queue) রৈখিক উপাত্ত সংগঠনের উদাহরণ।

অ্যারে

সম্পাদনা

অ্যারে (array) একপ্রকার রৈখিক উপাত্ত সংগঠন, যেখানে একইরকম উপাত্তগুলো মেমোরিতে পরপর সজ্জিত হয়। এই উপাত্তগুলো পূর্ণসংখ্যা (int), বাস্তব সংখ্যা (float অথবা double) কিংবা অক্ষর (char) হতে পারে। সি প্রোগ্রামিং ভাষায় অ্যারেকে arr[n] আকারে সংজ্ঞায়িত করা হয়, যেখানে arr হচ্ছে অ্যারের নাম এবং n হচ্ছে অ্যারের উপাদানের সংখ্যা। অ্যারের অন্তর্গত প্রত্যেকটি উপাদানকে 0 থেকে n-1 সংখ্যা অবধি চিহ্নিত করা হয়, যা ইন্ডেক্স (index) নামে পরিচিত। উদাহরণ: arr[4]={1, 3, 5, 7} একটি পূর্ণসংখ্যার অ্যারে, যেখানে 1-এর ইন্ডেক্স 0 আর 7-এর ইন্ডেক্স 3। অ্যারে বিষয়ে সুবিস্তারে জানার জন্য অ্যারে অধ্যায়টি দেখুন।

লিঙ্কড লিস্ট

সম্পাদনা

লিঙ্কড লিস্ট (linked list) একপ্রকার রৈখিক উপাত্ত সংগঠন, যেখানে একইরকম উপাত্তগুলো মেমোরিতে পরপর সজ্জিত না হলেও পরস্পর সংযুক্ত। একটি লিঙ্কড লিস্ট এক বা একাধিক নোড (node) নিয়ে গঠিত, যেখানে উপাত্ত সঞ্চিত থাকে। লিঙ্কড লিস্ট দুইপ্রকার: সিঙ্গলি লিঙ্কড লিস্ট (singly linked list) ও ডবলি লিঙ্কড লিস্ট (doubly linked list)। সিঙ্গলি লিঙ্কড লিস্টের একটি নোড কমপক্ষে দুটি অংশ নিয়ে গঠিত, প্রথম অংশে উপাত্ত আর দ্বিতীয় অংশে পরবর্তী নোডের ঠিকানা (address) সঞ্চিত থাকে। এর প্রথম নোডের ঠিকানা একটি নির্দিষ্ট পয়েন্টারে (pointer) সঞ্চিত হয়।

অন্যদিকে, ডবলি লিঙ্কড লিস্টের একটি নোড কমপক্ষে তিনটি অংশ নিয়ে গঠিত, যার প্রথম অংশে পূর্ববর্তী নোডের ঠিকানা, দ্বিতীয় অংশে উপাত্ত আর তৃতীয় অংশে পরবর্তী নোডের ঠিকানা সঞ্চিত থাকে। এর প্রথম ও শেষ নোডের ঠিকানা দুটি পৃথক পয়েন্টারে সঞ্চিত হয়। লিঙ্কড লিস্ট বিষয়ে সুবিস্তারে জানার জন্য লিঙ্কড লিস্ট অধ্যায়টি দেখুন।

স্ট্যাক

সম্পাদনা

স্ট্যাক (stack) একপ্রকর সরল রৈখিক উপাত্ত সংগঠন, যেখানে একটি প্রান্ত থেকে উপাত্ত যোগ করা হয় আর ঐ একই প্রান্ত থেকে অপসারণ করা হয়। এটি লাস্ট-ইন-ফার্স্ট-আউট (LIFO) ব্যবস্থা হিসাবে পরিচিত। স্ট্যাকের পরিভাষায় উপাত্ত সংযোজন "পুশ" (push) আর উপাত্ত অপসারণ "পপ" (pop) হিসাবে পরিচিত। স্ট্যাক বিষয়ে সুবিস্তারে জানার জন্য স্ট্যাক অধ্যায়টি দেখুন।

কিউ (queue) একপ্রকর সরল রৈখিক উপাত্ত সংগঠন, যেখানে একটি প্রান্ত থেকে উপাত্ত যোগ করা হয় আর অপর প্রান্ত থেকে অপসারণ করা হয়। এটি ফার্স্ট-ইন-ফার্স্ট-আউট (FIFO) ব্যবস্থা হিসাবে পরিচিত। কিউয়ের পরিভাষায় উপাত্ত সংযোজন "এনকিউ" (enqueue) আর উপাত্ত অপসারণ "ডিকিউ" (dequeue) হিসাবে পরিচিত। কিউ বিষয়ে সুবিস্তারে জানার জন্য কিউ অধ্যায়টি দেখুন।

অরৈখিক উপাত্ত সংগঠন

সম্পাদনা

এইধরনের উপাত্ত সংগঠনের উপাদানগুলো কোনো অনুক্রম (sequence) গঠন করে না, আর প্রতিটি উপাদানের একক পূর্বসূরী (predecessor) বা একক উত্তরসূরী (successor) নেই। ট্রি (tree) ও গ্রাফ (graph) অরৈখিক উপাত্ত সংগঠনের উদাহরণ।