循环单链表是一种数据结构,由使用自引用结构创建的节点组成。这些节点中的每一个都包含两个部分,即数据和对下一个列表节点的引用。
访问整个链接列表仅需要引用第一个列表节点。这被称为头部。列表中的最后一个节点指向列表的头或第一个节点。这就是将其称为循环链表的原因。
下面给出了实现循环单链表的程序。
#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()
将数据插入到链表的开头。它创建一个新节点,并将数字插入到新节点的数据字段中。如果head为NULL,则newnode指向自身,否则循环链接列表中的最后一个节点指向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()
显示整个链表。第一点指向头。然后将其连续转发到下一个节点,直到打印出节点的所有数据值为止。这在下面给出。
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; }