সার্কুলার সিঙ্গলি লিঙ্কড লিস্ট হল এক ধরনের ডাটা স্ট্রাকচার যা নোড দিয়ে তৈরি যেগুলো সেলফ রেফারেন্সিয়াল স্ট্রাকচার ব্যবহার করে তৈরি করা হয়। এই নোডগুলির প্রতিটিতে দুটি অংশ রয়েছে, যথা ডেটা এবং পরবর্তী তালিকা নোডের রেফারেন্স৷
সম্পূর্ণ লিঙ্ক করা তালিকা অ্যাক্সেস করার জন্য শুধুমাত্র প্রথম তালিকা নোডের রেফারেন্স প্রয়োজন। এটি মাথা হিসাবে পরিচিত। তালিকার শেষ নোডটি প্রধান বা তালিকার প্রথম নোডকে নির্দেশ করে। এই কারণেই এটি একটি বৃত্তাকার লিঙ্কযুক্ত তালিকা হিসাবে পরিচিত।
বৃত্তাকার এককভাবে সংযুক্ত তালিকা বাস্তবায়নের জন্য একটি প্রোগ্রাম নিম্নরূপ দেওয়া হয়েছে।
উদাহরণ
#include <iostream> using namespace std; struct Node { int data; struct Node *next; }; struct Node* head = NULL; void insert(int newdata) { struct Node *newnode = (struct Node *)malloc(sizeof(struct Node)); struct Node *ptr = head; newnode->data = newdata; newnode->next = head; if (head!= NULL) { while (ptr->next != head) ptr = ptr->next; ptr->next = newnode; } else newnode->next = newnode; head = newnode; } void display() { struct Node* ptr; ptr = head; do { cout<<ptr->data <<" "; ptr = ptr->next; } while(ptr != head); } int main() { insert(3); insert(1); insert(7); insert(2); insert(9); cout<<"The circular linked list is: "; display(); return 0; }
আউটপুট
The circular linked list is: 9 2 7 1 3
উপরের প্রোগ্রামে, স্ট্রাকচার নোড লিঙ্কড লিস্ট নোড গঠন করে। এতে ডেটা এবং পরবর্তী লিঙ্কযুক্ত তালিকা নোডের একটি পয়েন্টার রয়েছে। এটি নিম্নরূপ দেওয়া হল।
struct Node { int data; struct Node *next; };
ফাংশন insert() লিঙ্ক করা তালিকার শুরুতে ডেটা সন্নিবেশ করায়। এটি একটি নিউনোড তৈরি করে এবং নিউনোডের ডেটা ক্ষেত্রে নম্বর সন্নিবেশ করায়। যদি হেডটি NULL হয়, তাহলে নিউনোড নিজের দিকে নির্দেশ করে অন্যথায় বৃত্তাকার লিঙ্কযুক্ত তালিকার শেষ নোডটি নিউনোডের দিকে নির্দেশ করে। তারপর মাথাটি তালিকার শুরুতে অর্থাৎ নিউনোডের দিকে নির্দেশ করে। এটি নীচে দেওয়া হল৷
৷void insert(int newdata) { struct Node *newnode = (struct Node *)malloc(sizeof(struct Node)); struct Node *ptr = head; newnode->data = newdata; newnode->next = head; if (head!= NULL) { while (ptr->next != head) ptr = ptr->next; ptr->next = newnode; } else newnode->next = newnode; head = newnode; }
ফাংশন প্রদর্শন() পুরো লিঙ্কযুক্ত তালিকা প্রদর্শন করে। প্রথম ptr পয়েন্ট হেড. তারপর নোডের সমস্ত ডেটা মান প্রিন্ট না হওয়া পর্যন্ত এটি ক্রমাগত পরবর্তী নোডে ফরোয়ার্ড করা হয়। এটি নীচে দেওয়া হল৷
৷void display() { struct Node* ptr; ptr = head; do { cout<< ptr->data <<" "; ptr = ptr->next; } while(ptr != head); }
ফাংশনে main(), প্রথমে বিভিন্ন মান সন্নিবেশিত() কল করে বৃত্তাকার লিঙ্কযুক্ত তালিকায় ঢোকানো হয়। তারপর লিঙ্ক করা তালিকা প্রদর্শিত হয়. এটি নীচে দেওয়া হল৷
৷int main() { insert(3); insert(1); insert(7); insert(2); insert(9); cout<<"The circular linked list is: "; display(); return 0; }