C语言实现带头结点的链表的创建、查找、插入、删除操作

yizhihongxing

C语言实现带头结点的链表的创建、查找、插入、删除操作攻略

一、链表基本概念

链表是一种动态的数据结构,它可以在运行时动态地分配内存,支持数据的插入、删除等操作。链表(Linked List)由多个节点(Node)组成,每个节点包含两部分,一个是数据部分(Data),另一个是指向下一个节点的指针(Next)。

二、带头结点的链表

带头结点的链表是一种特殊的链表,它的头结点不存储任何数据,只是一个哨兵节点,可以简化链表的操作。在插入和删除节点时,只需要调整相邻节点的指针,不需要特判第一个节点和最后一个节点。

三、创建链表

创建链表需要分配内存空间,为每个节点赋值并建立节点之间的关系。对于带头结点的链表,在创建时需要先创建一个头结点,并将其指针域设为空。

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

typedef struct Node {
    int data;
    struct Node *next;
} Node, *LinkedList;

LinkedList createList() {
    LinkedList head = (LinkedList)malloc(sizeof(Node));
    head->next = NULL;
    return head;
}

四、查找节点

在链表中查找一个节点,需要从链表的头结点开始,依次访问各个节点,直到找到目标节点或者链表末尾。如果找到节点,则返回节点指针,否则返回NULL。

Node *findNode(LinkedList list, int x) {
    Node *p = list->next;
    while (p != NULL && p->data != x) {
        p = p->next;
    }
    return p;
}

五、插入节点

在链表中插入一个节点,需要先查找节点的插入位置,然后在该位置的前一个节点后面插入新节点,最后建立新节点与后面节点的关系。

void insertNode(LinkedList list, int x) {
    Node *p = (Node*)malloc(sizeof(Node));
    p->data = x;
    p->next = NULL;

    Node *prev = list;
    Node *cur = list->next;
    while (cur != NULL && cur->data < x) {
        prev = cur;
        cur = cur->next;
    }
    p->next = prev->next;
    prev->next = p;
}

例如,现在有一个升序的链表1->3->5->7,需要在其中插入数值为4的节点,插入后的链表为1->3->4->5->7。

LinkedList list = createList();
insertNode(list, 1);
insertNode(list, 3);
insertNode(list, 5);
insertNode(list, 7);
insertNode(list, 4);
// 遍历链表
Node *p = list->next;
while (p != NULL) {
    printf("%d ", p->data);
    p = p->next;
}

六、删除节点

在链表中删除一个节点,需要先查找节点的位置,然后从链表中摘除该节点,并将其内存空间释放。

void deleteNode(LinkedList list, int x) {
    Node *prev = list;
    Node *cur = list->next;
    while (cur != NULL && cur->data != x) {
        prev = cur;
        cur = cur->next;
    }
    if (cur != NULL) {
        prev->next = cur->next;
        free(cur);
    }
}

例如,现在有一个升序的链表1->3->5->7,需要删除数值为5的节点,删除后的链表为1->3->7。

LinkedList list = createList();
insertNode(list, 1);
insertNode(list, 3);
insertNode(list, 5);
insertNode(list, 7);
deleteNode(list, 5);
// 遍历链表
Node *p = list->next;
while (p != NULL) {
    printf("%d ", p->data);
    p = p->next;
}

七、总结

带头结点的链表是一种常用的数据结构,能够动态地分配内存空间,支持插入和删除等操作。在进行操作时,需要考虑到头结点等特殊情况,并利用指针建立节点之间的联系,从而完成链表的创建、查找、插入、删除等操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现带头结点的链表的创建、查找、插入、删除操作 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • SQL Injection with MySQL 注入分析

    SQL Injection (SQL注入)是一种常见的网络攻击技术,攻击者通过输入一定格式的恶意SQL语句,利用程序没有对用户输入进行校验或者过滤的漏洞,来获取数据库中的数据或者执行非授权的操作。本文将针对MySQL数据库漏洞进行讲解,介绍常见的攻击方法和防御策略。 SQL Injection with MySQL 注入分析 攻击方法 错误的输入验证 攻击者…

    数据结构 2023年5月17日
    00
  • C语言超详细讲解数据结构中的线性表

    C语言超详细讲解数据结构中的线性表完整攻略 线性表的概念和基本操作 线性表是指由同类型的数据元素构成的有限序列。即每个数据元素只有一个前驱和一个后继。线性表通常用于表示一维数组、列表、队列等数据结构。 线性表的基本操作包括: 初始化操作:创建一个空的线性表。 插入操作:在线性表中插入一个元素。 删除操作:删除线性表中的一个元素。 查找操作:查找线性表中是否存…

    数据结构 2023年5月17日
    00
  • Raft协议及伪码解析

    目录 节点的状态转换 follower candidate leader 伪码部分 节点初始化(Initialazation) 选举时其他节点的视角 回到candidate选举时的视角 消息如何广播复制 重要的反复出现的ReplicateLog 节点收到了LogRequest 节点如何追加log,Appendentries 再次回到leader, 如何处理L…

    算法与数据结构 2023年4月17日
    00
  • 使用JavaScript实现链表的数据结构的代码

    要使用JavaScript实现链表数据结构,需要考虑以下几个方面: 链表的基本结构 链表的基本操作(插入、删除、遍历等) JavaScript 实现数据结构的具体步骤 下面我将逐一阐述。 链表的基本结构 链表是由一系列节点所组成的数据结构,每个节点都保存着下一个节点的引用关系。链表可以是单向的,也可以是双向的。单向链表的节点只有指向下一个节点的指针,而双向链…

    数据结构 2023年5月17日
    00
  • Python数据结构之翻转链表

    对于“Python数据结构之翻转链表”的完整攻略,我会按照以下顺序进行讲解: 1.什么是链表? 2.如何翻转链表? 3.示例1:翻转一个简单的链表 4.示例2:翻转一个带环的链表 5.如何在Python中实现翻转链表? 接下来,我会详细讲解每个部分。 什么是链表? 链表是一种数据结构,它由一系列的节点组成,每个节点包含了数据和指向下一个节点的指针。链表有很多…

    数据结构 2023年5月17日
    00
  • Java数据结构BFS广搜法解决迷宫问题

    Java数据结构BFS广搜法解决迷宫问题 什么是BFS广搜法? 广度优先搜索(BFS)是一种遍历或搜索数据结构(例如树或图)的算法经典方法之一,也是解决迷宫问题的有效解法之一。BFS方法是从图的某个节点出发,以广度优先的方式依次访问与该节点相通的各节点,直到访问所有节点。BFS算法主要借助队列的数据结构来实现。 解决迷宫问题的具体实现 数据准备: 在解决迷宫…

    数据结构 2023年5月17日
    00
  • MySQL高级篇之索引的数据结构详解

    MySQL高级篇之索引的数据结构详解 索引的作用 索引是一种数据结构,用于快速地定位和访问数据表中的指定行。MySQL中索引通常以B-tree(B树)或哈希表的形式来实现,通过将索引存储在内存中,可以提高系统的查询效率。 常用的索引分为主键索引、唯一索引和普通索引。其作用分别为: 主键索引:保证表中每一行数据的唯一性,便于快速查询和修改数据。 唯一索引:保证…

    数据结构 2023年5月17日
    00
  • Python数据结构之二叉排序树的定义、查找、插入、构造、删除

    Python数据结构之二叉排序树 一、定义 二叉排序树(Binary Search Tree,BST),也称为二叉查找树或二叉搜索树,是一种基于二叉树的数据结构,其中每个节点都包含一个键值,且满足: 左子树中所有节点的键值均小于当前节点; 右子树中所有节点的键值均大于当前节点; 这是一种自平衡的数据结构,可以快速地进行查找、插入、删除等操作。 二、查找 查找…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部