ডাটা স্ট্রাকচার ও অ্যালগোরিদম
কম্পিউটার বিজ্ঞানে উপাত্ত সংগঠন (টেমপ্লেট:Lang-en) বলতে উপাত্তকে কম্পিউটারে রাখার একটি নির্দিষ্ট উপায়কে বোঝায় যাতে উপাত্তকে দক্ষতার সাথে ব্যবহার করা যায়। যত্নের সাথে বাছাই করা উপাত্ত সংগঠন উপাত্তের উপর সবচেয়ে দক্ষ অ্যালগোরিদমের ব্যবহার সম্ভব করে তোলে। একটি সুপরিকল্পিত উপাত্ত সংগঠন মেমরি ও সময় যথাসম্ভব বাঁচিয়ে উপাত্তের উপর অনেকগুলি জরুরি অপারেশন প্রয়োগ করার ক্ষমতা দেয়। কোন একটি প্রোগ্রামিং ভাষাতে প্রদত্ত উপাত্ত টাইপ, রেফারেন্স ও অপারেশন অনুসারে উপাত্ত সংগঠনগুলি বাস্তবায়ন করা হয়।
এ্যাপ্লিকেশনের ধরণের উপর ডাটা স্ট্রাকচারের শ্রেণীবিভাগ হয়ে থাকে এবং এদের মধ্যে অনেকগুলো নির্দিষ্ট কিছু কাজের জন্য বিশেষভাবে তৈরি করা হয়। উদাহরণস্বরূপ, বি-ট্রিগুলো ডাটাবেসের ক্ষেত্রে প্রয়োগ করার জন্য বিশেষভাবে উপযুক্ত এবং রুটিং টেবিলগুলো মেশিন নেটওয়ার্কের উপর নির্ভরশীল।
বিভিন্ন ধরণের প্রোগ্রামের ডিজাইনে, ডাটা স্ট্রাকচারের বাছাইকরণ একটি অন্যতম প্রধান বিষয়। বড় ধরণের সিস্টেম তৈরির অভিজ্ঞতা থেকে জানা যায় যে, চূড়ান্ত ফলাফলের মান ও সার্থকতা অনেকাংশে শ্রেষ্ঠ ডাটা স্ট্রাকচার বাছাই করার উপর নির্ভরশীল। ডাটা স্ট্রাকচার বাছাই করার পর, এ্যালগরিদমের ব্যবহার অবশ্যম্ভাবী হয়ে ওঠে। অবশ্য কখনো এর বিপরীত পদ্ধতিও অবলম্বন করা হয় এবং এক্ষেত্রে কোন নির্দিষ্ট এ্যালগরিদমের জন্য উপযুক্ত ডাটা স্ট্রাকচার বাছাই করা হয়। উভয় ক্ষেত্রেই প্রয়োজনীয় ডাটা স্ট্রাকচারের বাছাইকরণ অত্যন্ত জরুরি।
সুসংগঠিত ডিজাইন পদ্ধতি এবং প্রোগ্রামিং ভাষাগুলোর গভীর বিশ্লেষণের মাধ্যমে জানা যায় যে, এ্যালগরিদমের বদলে ডাটা স্ট্রাকচারই হল প্রধান সাংগঠনিক উপকরণ। অনেক প্রোগ্রামিং ভাষা বেশ কিছু মডিউল সিস্টেম ব্যবহার করে যার মাধ্যমে বিভিন্ন এ্যাপ্লিকেশনের জন্য ডাটা স্ট্রাকচারগুলো ব্যবহার করা যায়। এজন্য নিয়ন্ত্রিত ইণ্টারফেসের আড়ালে তাদের সুনির্দিষ্ট প্রয়োগপদ্ধতিগুলো আড়াল করে রাখা হয়। অবজেক্ট-ওরিয়েণ্টড প্রোগ্রামিং ভাষা যেমন সি++ এবং জাভা এই উদ্দেশ্য বিভিন্ন ক্লাস ব্যবহার করে।
ডাটা স্ট্রাকচারের অত্যধিক গুরুত্বের কারণে অনেক প্রোগ্রামিং ভাষার লাইব্রেরিতে এদের অন্তর্ভুক্ত করা হয়। সি++ এর স্ট্যাণ্ডার্ড টেমপ্লেট লাইব্রেরি কণ্টেইনার্স, জাভার কালেকশন্স ফ্রেমওয়ার্ক এবং মাইক্রোসফটের .নেট ফ্রেমওয়ার্কে এই পদ্ধতি অবলম্বন করা হয়।
অ্যারে, স্ট্যাক, কিউ, লিংকড লিস্ট, ট্রি, গ্রাফ, সার্চিং এবং সর্টিং, ইত্যাদি কতগুলি বহুল ব্যবহৃত উপাত্ত সংগঠন। ডাটা স্ট্রাকচার ইম্লিমেণ্টেশন বা ইণ্টারফেসের প্রতিনিধিত্ব করে। একটি ডাটা স্ট্রাকচারকে দু’টি ফাংশনের মাঝে একটি ইণ্টারফেস হিসেবে দেখা যায় বা সংশ্লিষ্ট ডাটা টাইপের মাধ্যমে সাজানো ও সংরক্ষিত তথ্যভাণ্ডার প্রয়োগ করার একটি পদ্ধতি হিসেবে দেখা যায়।
অ্যারে
[সম্পাদনা]সূচনা
[সম্পাদনা]নির্দিষ্ট সংখ্যক, একই ধরণের তথ্য নির্দেশনাকে অ্যাের্ বলা হয় ৷ যেমন, কোন বিদ্যালয়ের 200 জন ছাত্রের বয়স, অ্যাের্-র মাধ্যমে প্রকাশ করা হল ৷
অ্যারে ঘোষণা (Declaration of an Array in C)
[সম্পাদনা]অন্যন্ন ভেরিয়েবলের মতই অ্যাের্ ঘোষিত হয় ৷
স্ট্যাক
[সম্পাদনা]স্ট্যাক হল এমন একটি রৈখিক গঠন যাহার শূধুমাত্র একদিকেই তথ্য যুক্ত করা যায় বা মুছে দেওয়া যায় ৷ উদাহরণ হিসেবে বলা যায় টেবিলের উপর কিছু সংখ্যক বই (একটি অন্যটির উপর) , যার শুধুমাত্র উপরের বইটি সরান যাবে বা এর উপর অন্য আরেকটি বই রাখা যাবে ৷
স্ট্যাক উপস্থাপন অ্যারে-র মাধ্যমে
[সম্পাদনা]- include <stdio.h>
- include <conio.h>
- define MAXSIZE 5
struct stack /* Structure definition for stack */ { int stk[MAXSIZE]; int top; };
typedef struct stack STACK; STACK s;
/* Function declaration/Prototype*/
void push (void); int pop(void); void display (void);
void main () { int choice; int option = 1;
clrscr ();
s.top = -1;
printf ("STACK OPERATION\n"); while (option) { printf ("------------------------------------------\n"); printf (" 1 --> PUSH \n"); printf (" 2 --> POP \n"); printf (" 3 --> DISPLAY \n"); printf (" 4 --> EXIT \n"); printf ("------------------------------------------\n");
printf ("Enter your choice\n"); scanf ("%d", &choice);
switch (choice) { case 1: push(); break; case 2: pop(); break; case 3: display(); break; case 4: return; }
fflush (stdin); printf ("Do you want to continue(Type 0 or 1)?\n"); scanf ("%d", &option); } }
/*Function to add an element to the stack*/ void push () { int num; if (s.top == (MAXSIZE - 1)) { printf ("Stack is Full\n"); return; } else { printf ("Enter the element to be pushed\n"); scanf ("%d", &num); s.top = s.top + 1; s.stk[s.top] = num; } return; }
/*Function to delete an element from the stack*/ int pop () { int num; if (s.top == - 1) { printf ("Stack is Empty\n"); return (s.top); } else { num = s.stk[s.top]; printf ("poped element is = %d\n", s.stk[s.top]); s.top = s.top - 1; } return(num); }
/*Function to display the status of the stack*/ void display () { int i; if (s.top == -1) { printf ("Stack is empty\n"); return; } else { printf ("\nThe status of the stack is\n"); for (i = s.top; i >= 0; i--) { printf ("%d\n", s.stk[i]); } } printf ("\n"); }
কিউ বাংলা মানে লাইনে দাড়ানো ৷ কিউ হচ্ছে এমন একটি সরল রৈখিক গঠন যাহার শুধুমাত্র পশ্চাদ্ভাগে তথ্য যুক্ত এবং সম্মুখভাগ থেকে মুছে ফেলা যায় ৷ এই দুই প্রান্তকে যথাক্রমে "REAR" & "FRONT" বলা হয় ৷
লিংকড লিষ্ট বাংলা মানে সংযুক্ত সারি ৷