当前位置:首页C语言 > 正文

C语言线性表之循环链表

作者:野牛程序员:2023-08-23 11:43:40C语言阅读 2589

循环链表是一种特殊形式的链表,它的最后一个节点指向链表的第一个节点,形成一个闭环。在 C 语言中,可以通过指针来实现循环链表。以下是一个简单的循环链表的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

// 定义循环链表节点
typedef struct Node {
    int data;
    struct Node *next;
} Node;

// 创建循环链表
Node* createCircularLinkedList(int n) {
    if (n <= 0) {
        return NULL;
    }
    
    Node *head = NULL;
    Node *prev = NULL;
    
    for (int i = 1; i <= n; i++) {
        Node *newNode = (Node *)malloc(sizeof(Node));
        newNode->data = i;
        
        if (head == NULL) {
            head = newNode;
        } else {
            prev->next = newNode;
        }
        
        newNode->next = head;
        prev = newNode;
    }
    
    return head;
}

// 打印循环链表
void printCircularLinkedList(Node *head) {
    if (head == NULL) {
        printf("循环链表为空\\n");
        return;
    }
    
    Node *current = head;
    
    do {
        printf("%d ", current->data);
        current = current->next;
    } while (current != head);
    
    printf("\\n");
}

// 销毁循环链表
void destroyCircularLinkedList(Node *head) {
    if (head == NULL) {
        return;
    }
    
    Node *current = head;
    Node *next;
    
    do {
        next = current->next;
        free(current);
        current = next;
    } while (current != head);
}

int main() {
    int n;
    printf("请输入循环链表的大小:");
    scanf("%d", &n);
    
    Node *head = createCircularLinkedList(n);
    
    printf("循环链表内容:");
    printCircularLinkedList(head);
    
    destroyCircularLinkedList(head);
    
    return 0;
}

在这段代码中,Node 结构表示循环链表的节点。createCircularLinkedList 函数用于创建循环链表,printCircularLinkedList 函数用于打印循环链表的内容,destroyCircularLinkedList 函数用于销毁循环链表。需要注意的是,循环链表的操作需要特别小心,以避免陷入死循环或内存泄漏。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击