数据结构——单向链表(C语言版)

在数据结构和算法中,链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在C语言中,我们可以使用指针来实现单向链表。下面将详细介绍如何用C语言实现单向链表。

目录

[1. 定义节点结构体](#1. 定义节点结构体)

[2. 初始化链表](#2. 初始化链表)

[3. 插入节点](#3. 插入节点)

[4. 删除节点](#4. 删除节点)

[5. 遍历链表](#5. 遍历链表)

[6. 主函数](#6. 主函数)


1. 定义节点结构体

首先,我们需要定义表示链表节点的结构体。每个节点包含一个数据域和一个指向下一个节点的指针域。

cpp 复制代码
typedef struct Node {
    int data;
    struct Node* next;
} Node;
2. 初始化链表

接下来,我们需要编写函数来初始化链表。初始化链表时,我们将头指针指向NULL,表示链表为空。

cpp 复制代码
Node* head = NULL;
3. 插入节点

实现在链表的头部插入节点的函数:

cpp 复制代码
Node* insertNode(Node* head, int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = head;
    return newNode;
}
4. 删除节点

实现删除指定数值节点的函数:

cpp 复制代码
Node* deleteNode(Node* head, int data) {
    Node* current = head;
    Node* prev = NULL;

    while (current != NULL) {
        if (current->data == data) {
            if (prev == NULL) {
                head = current->next;
            } else {
                prev->next = current->next;
            }
            free(current);
            break;
        }
        prev = current;
        current = current->next;
    }

    return head;
}
5. 遍历链表

实现遍历链表并打印节点数据的函数:

cpp 复制代码
void printList(Node* head) {
    Node* current = head;

    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\\n");
}
6. 主函数

在主函数中测试链表操作:

cpp 复制代码
int main() {
    Node* head = NULL;

    head = insertNode(head, 1);
    head = insertNode(head, 2);
    head = insertNode(head, 3);

    printf("Initial List: ");
    printList(head);

    head = deleteNode(head, 2);

    printf("List after deleting 2: ");
    printList(head);

    return 0;
}

通过以上步骤,我们实现了用C语言创建、插入、删除和遍历单向链表的基本操作。在实陧过程中,要注意内存分配和释放,避免内存泄漏。链表是一种重要的数据结构,掌握链表的实现原理对于理解其他数据结构和算法也非常有帮助。

在接下来我们也将学习双向链表等更有意思的东西,如果本篇有不理解的地方,欢迎私信我或在评论区指出,期待与你们共同进步。

相关推荐
zhangfeng113322 分钟前
算子开发 Overwrite 覆盖/替换模式 Accumulate 累加模式,性能对比 memset错误 bat_alloc 错误
c语言·人工智能·gnu·算子开发
SuperByteMaster33 分钟前
JLinkDevices.xml FLM文件路径不对
c语言
ysa0510301 小时前
【并查集】判环,深搜
数据结构·c++·算法·深度优先
LDR0061 小时前
LDR6500赋能POS机底座:单口Type-C供电、维护与产测一体化解决方案
大数据·c语言·人工智能
鱼很腾apoc2 小时前
【Linux】第7期 进程间通信 (IPC) 详解:管道 (匿名 / 命名) + System V
linux·服务器·c语言·学习·进程间通信·ipc
.Hypocritical.2 小时前
数据结构笔记——链表成环/反转 + 有序二叉树(BST)构建、遍历、删除
java·数据结构
wuyk5553 小时前
21. 嵌入式面试避坑指南:sizeof 是关键字,不是函数!
c语言·开发语言·stm32·单片机·嵌入式硬件
fzm52986 小时前
车载ECU单元测试技术与应用研究
c语言·自动化测试·单元测试·嵌入式·白盒测试
十月的皮皮6 小时前
C语言学习笔记20260703-牛牛与后缀表达式(逆波兰表达式)
c语言·笔记·学习
apocelipes2 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境