কম্পিউটার টিউটোরিয়াল

সার্কুলার সিংলি লিঙ্কড লিস্ট বাস্তবায়নের C++ প্রোগ্রাম


সার্কুলার সিংলি লিঙ্কড লিস্ট একটি ডেটা স্ট্রাকচারের প্রকার যা নোড দ্বারা তৈরি হয় যা সেলফ-রেফারেনশিয়াল স্ট্রাকচার ব্যবহার করে তৈরি করা হয়। এই নোডগুলো দুটি অংশ ধারণ করে: ডেটা এবং পরবর্তী লিস্ট নোডের রেফারেন্স।

প্রথম লিস্ট নোডের রেফারেন্স মাত্রই পুরো লিঙ্কড লিস্ট অ্যাক্সেস করার জন্য পর্যাপ্ত। এটিকে হেড (head) বলা হয়। লিস্টের শেষ নোডটি হেড বা লিস্টের প্রথম নোডকে পয়েন্ট করে। সেটিই এই লিস্টকে সার্কুলার লিঙ্কড লিস্ট বলার কারণ।

সার্কুলার সিংলি লিঙ্কড লিস্ট বাস্তবায়ন করার একটি প্রোগ্রাম নিচে দেওয়া হলো:

উদাহরণ

#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

উপরোক্ত প্রোগ্রামে, Node স্ট্রাকচারটি লিঙ্কড লিস্টের নোড গঠন করে। এতে ডেটা এবং পরবর্তী লিঙ্কড লিস্ট নোডের পয়েন্টার থাকে। এটি নিচে দেওয়া হলো:

struct Node {
    int data;
    struct Node *next;
};

insert() ফাংশনটি লিঙ্কড লিস্টের শুরুতে ডেটা ইনসার্ট করে। এটি একটি newnode তৈরি করে এবং নম্বরটি newnode-এর ডেটা ফিল্ডে ইনসার্ট করে। যদি head NULL হয়, তবে newnode নিজের দিকে পয়েন্ট করে অন্যথায় সার্কুলার লিঙ্কড লিস্টের শেষ নোডটি newnode-কে পয়েন্ট করে। তারপর head লিস্টের শুরুকে পয়েন্ট করে অর্থাৎ newnode-কে। এটি নিচে দেওয়া হলো:

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;
}

display() ফাংশনটি পুরো লিঙ্কড লিস্ট প্রদর্শন করে। প্রথমে ptr head-কে পয়েন্ট করে। তারপর এটি liên tục পরবর্তী নোডে ফরওয়ার্ড করা হয় যতক্ষণ না নোডগুলোর সমস্ত ডেটা ভ্যালু প্রিন্ট হয়। এটি নিচে দেওয়া হলো:

void display() {
    struct Node* ptr;
    ptr = head;
    do {
        cout << ptr->data << " ";
        ptr = ptr->next;
    } while (ptr != head);
}

main() ফাংশনে, প্রথমে বিভিন্ন মান insert() কল করে সার্কুলার লিঙ্কড লিস্টে ইনসার্ট করা হয়। তারপর লিঙ্কড লিস্টটি প্রদর্শন করা হয়। এটি নিচে দেওয়া হলো:

int main() {
    insert(3);
    insert(1);
    insert(7);
    insert(2);
    insert(9);
    cout << "The circular linked list is: ";
    display();
    return 0;
}

  1. জাভাস্ক্রিপ্টে সিংলি লিংকড লিস্টকে সার্কুলার (Circular) করা

  2. মাল্টিলেভেল লিংকড লিস্ট ফ্ল্যাটেন করা (C++)

  3. C++ প্রোগ্রাম: অ্যাডজেসেন্সি লিস্ট বাস্তবায়ন

  4. পাইথন প্রোগ্রাম: সিঙ্গলি লিংকড লিস্টকে সার্কুলার লিস্টে রূপান্তর করা