📜  数据结构-循环单链表(1)

📅  最后修改于: 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;
}
总结

循环单链表是一种非常有用的数据结构,它可以解决很多问题。在实现时,要注意将最后一个节点的指针指向第一个节点,形成循环。使用循环单链表之前,一定要仔细思考数据结构的特点,并根据自己的需求来选择使用哪些操作。