📅  最后修改于: 2023-12-03 15:40:00.777000             🧑  作者: Mango
循环单链表是一种数据结构,它是建立在单链表之上的。和单链表一样,每个节点包含一个数据项和一个指向下一个节点的指针。不同的是,循环单链表不以NULL结束,而是将最后一个节点的指针指向第一个节点,形成一个循环。
以下是使用C语言实现循环单链表的基本操作。
typedef struct Node {
int data;
struct Node* next;
} Node;
初始化一个空的循环单链表。
Node* init() {
Node* head = (Node*)malloc(sizeof(Node));
head->next = head;
return head;
}
在指定位置插入一个节点。
void insert(Node* head, int index, int value) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
Node* p = head;
for (int i = 0; i < index && p->next != head; i++) {
p = p->next;
}
node->next = p->next;
p->next = node;
}
在指定位置删除一个节点。
void del(Node* head, int index) {
Node* p = head;
for (int i = 0; i < index && p->next != head; i++) {
p = p->next;
}
Node* q = p->next;
p->next = q->next;
free(q);
}
查找指定值的节点。
Node* find(Node* head, int value) {
Node* p = head->next;
while (p != head) {
if (p->data == value) {
return p;
}
p = p->next;
}
return NULL;
}
循环单链表是一种非常有用的数据结构,它可以解决很多问题。在实现时,要注意将最后一个节点的指针指向第一个节点,形成循环。使用循环单链表之前,一定要仔细思考数据结构的特点,并根据自己的需求来选择使用哪些操作。