C语言实现单链表-增删改查

简介: 链表是由一连串节点组成的数据结构,每个节点包含一个数据值和一个指向下一个节点的指针。链表可以在头部和尾部插入和删除节点,因此可以在任何地方插入和删除节点,从而使其变得灵活和易于实现。

链表是由一连串节点组成的数据结构,每个节点包含一个数据值和一个指向下一个节点的指针。链表可以在头部和尾部插入和删除节点,因此可以在任何地方插入和删除节点,从而使其变得灵活和易于实现。

链表通常用于实现有序集合,例如队列和双向链表。链表的优点是可以快速随机访问节点,而缺点是插入和删除操作相对慢一些,因为需要移动节点。此外,链表的长度通常受限于内存空间,因此当链表变得很长时,可能需要通过分页或链表分段等方式来管理其内存。

image.png

下面是一套封装好的单链表框架,包括创建链表、插入节点、删除节点、修改节点、遍历节点和清空链表等常见操作,其中每个节点存储一个结构体变量,该结构体中包含一个名为data的int类型成员。

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

// 链表节点结构体
typedef struct ListNode {
   
   
    int data;                   // 节点数据
    struct ListNode *next;      // 下一个节点的指针
} ListNode;

// 创建一个新节点
ListNode *createNode(int data) {
   
   
    ListNode *node = (ListNode*) malloc(sizeof(ListNode));
    node->data = data;
    node->next = NULL;
    return node;
}

// 在链表头部插入一个新节点
ListNode *insertNodeAtHead(ListNode *head, int data) {
   
   
    ListNode *node = createNode(data);
    node->next = head;
    return node;
}

// 在链表尾部插入一个新节点
ListNode *insertNodeAtTail(ListNode *head, int data) {
   
   
    ListNode *node = createNode(data);
    if(head == NULL) {
   
   
        return node;
    } else {
   
   
        ListNode *current = head;
        while(current->next != NULL) {
   
   
            current = current->next;
        }
        current->next = node;
        return head;
    }
}

// 删除链表中第一个值为data的节点
ListNode *deleteNode(ListNode *head, int data) {
   
   
    if(head == NULL) {
   
   
        return NULL;
    }
    if(head->data == data) {
   
   
        ListNode *current = head;
        head = head->next;
        free(current);
        return head;
    }
    ListNode *current = head;
    while(current->next != NULL && current->next->data != data) {
   
   
        current = current->next;
    }
    if(current->next != NULL) {
   
   
        ListNode *deleteNode = current->next;
        current->next = deleteNode->next;
        free(deleteNode);
    }
    return head;
}

// 修改链表中第一个值为oldData的节点的数据为newData
void updateNode(ListNode *head, int oldData, int newData) {
   
   
    ListNode *current = head;
    while(current != NULL) {
   
   
        if(current->data == oldData) {
   
   
            current->data = newData;
            break;
        } else {
   
   
            current = current->next;
        }
    }
}

// 遍历链表
void traverseList(ListNode *head) {
   
   
    ListNode *current = head;
    while(current != NULL) {
   
   
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

// 清空链表,释放所有节点的内存空间
void clearList(ListNode *head) {
   
   
    while(head != NULL) {
   
   
        ListNode *current = head;
        head = head->next;
        free(current);
    }
}

// 示例程序
int main() {
   
   
    ListNode *head = NULL;
    head = insertNodeAtHead(head, 1);
    head = insertNodeAtHead(head, 2);
    head = insertNodeAtTail(head, 3);
    traverseList(head);
    head = deleteNode(head, 2);
    traverseList(head);
    updateNode(head, 1, 4);
    traverseList(head);
    clearList(head);
    return 0;
}

在上述代码中,定义了一个节点结构体ListNode,其中包含一个int类型的data成员和一个指向下一个节点的指针。接着定义了用于创建新节点、插入节点、删除节点、修改节点、遍历节点和清空链表等操作的子函数,并在main函数中演示了这些操作的使用例子。在使用完链表后一定要调用clearList函数释放内存空间。

目录
相关文章
|
9月前
|
存储 编译器 C语言
【数据结构】C语言实现单链表万字详解(附完整运行代码)
【数据结构】C语言实现单链表万字详解(附完整运行代码)
158 0
|
4月前
|
存储 C语言
C语言单链表实现
一个用C语言编写的简单学生信息管理系统,该系统具备信息输入、成绩计算、排序、删除、查找、修改、保存和读取文件等功能。
39 0
C语言单链表实现
|
5月前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
808 6
|
5月前
|
存储 C语言 C++
数据结构基础详解(C语言) 顺序表:顺序表静态分配和动态分配增删改查基本操作的基本介绍及c语言代码实现
本文介绍了顺序表的定义及其在C/C++中的实现方法。顺序表通过连续存储空间实现线性表,使逻辑上相邻的元素在物理位置上也相邻。文章详细描述了静态分配与动态分配两种方式下的顺序表定义、初始化、插入、删除、查找等基本操作,并提供了具体代码示例。静态分配方式下顺序表的长度固定,而动态分配则可根据需求调整大小。此外,还总结了顺序表的优点,如随机访问效率高、存储密度大,以及缺点,如扩展不便和插入删除操作成本高等特点。
263 5
|
5月前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
5月前
|
算法 C语言 开发者
C语言手撕实战代码_单链表
本文档详细介绍了使用C语言实现单链表的各种基本操作和经典算法。内容涵盖单链表的构建、插入、查找、合并及特殊操作,如头插法和尾插法构建单链表、插入元素、查找倒数第m个节点、合并两个有序链表等。每部分均配有详细的代码示例和注释,帮助读者更好地理解和掌握单链表的编程技巧。此外,还提供了判断子链、查找公共后缀等进阶题目,适合初学者和有一定基础的开发者学习参考。
|
存储 C语言
数据结构——单链表(C语言)
数据结构——单链表(C语言)
|
6月前
|
存储 C语言
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
|
8月前
|
存储 人机交互 C语言
【C语言项目实战】使用单链表实现通讯录
【C语言项目实战】使用单链表实现通讯录
|
9月前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解

热门文章

最新文章