龙空技术网

你看不懂的C语言万能环形链表

记录生活那些事儿 564

前言:

此刻我们对“c语言编写链表”大致比较关心,你们都想要分析一些“c语言编写链表”的相关知识。那么小编同时在网摘上网罗了一些关于“c语言编写链表””的相关知识,希望各位老铁们能喜欢,我们一起来学习一下吧!

以下是基于Linux系统,用C语言实现的一个存储万能数据类型的环形链表。

环形链表-图示

代码逻辑相对于普通链表,确实有些难度,先看懂,再运用。

#include <stdio.h>#include <stdlib.h>// 定义链表结点typedef struct Node {    void* data;    struct Node* next;} Node;// 创建结点Node* createNode(void* data) {    Node* newNode = (Node*)malloc(sizeof(Node));    newNode->data = data;    newNode->next = NULL;    return newNode;}// 插入结点到链表尾部void insert(Node** head, void* data) {    Node* newNode = createNode(data);    if (*head == NULL)        *head = newNode;    else {        Node* temp = *head;        while (temp->next != NULL)            temp = temp->next;        temp->next = newNode;    }    newNode->next = *head;}// 遍历链表并打印结点数据void printList(Node* head) {    if (head == NULL) {        printf("链表为空\n");        return;    }    Node* temp = head;    do {        printf("%p ", temp->data); // 根据实际情况打印数据,这里示意输出内存地址        temp = temp->next;    } while (temp != head);    printf("\n");}// 销毁链表void destroyList(Node** head) {    if (*head == NULL)        return;    Node* current = *head;    Node* next;    do {        next = current->next;        free(current);        current = next;    } while (current != *head);    *head = NULL;}int main() {    Node* myList = NULL;    int num1 = 10;    int num2 = 20;    int num3 = 30;    insert(&myList, &num1);    insert(&myList, &num2);    insert(&myList, &num3);    printList(myList);    destroyList(&myList);    return 0;}

【多余的解释:】

上述代码定义了一个结构体Node作为链表的结点,其中data成员可以存储任意类型的数据。通过createNode函数创建结点,通过insert函数将结点插入链表尾部,通过printList函数遍历链表并打印数据。

标签: #c语言编写链表