รายการที่เชื่อมโยงแบบวงกลมเป็นโครงสร้างข้อมูลประเภทหนึ่งที่ประกอบด้วยโหนดที่สร้างขึ้นโดยใช้โครงสร้างการอ้างอิงตนเอง แต่ละโหนดเหล่านี้ประกอบด้วยสองส่วน คือ ข้อมูลและการอ้างอิงไปยังโหนดรายการถัดไป
จำเป็นต้องอ้างอิงถึงโหนดรายการแรกเท่านั้นเพื่อเข้าถึงรายการที่เชื่อมโยงทั้งหมด นี้เรียกว่าหัว โหนดสุดท้ายในรายการชี้ไปที่ส่วนหัวหรือโหนดแรกของรายการ นั่นคือเหตุผลที่เรียกว่ารายการเชื่อมโยงแบบวงกลม
มีโปรแกรมสำหรับใช้งานรายการเชื่อมโยงแบบวงกลมดังนี้
ตัวอย่าง
#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 แล้ว newnode จะชี้ไปที่ตัวเอง มิฉะนั้น node สุดท้ายในรายการที่เชื่อมโยงแบบวงกลมจะชี้ไปที่ 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 แรกชี้ไปที่หัว จากนั้นจะส่งต่อไปยังโหนดถัดไปอย่างต่อเนื่องจนกว่าจะพิมพ์ค่าข้อมูลทั้งหมดของโหนด ด้านล่างนี้
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; }