首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言-链表(单向链表、双向链表)

,而且链表的空间是存储在堆上面的,可以动态分配,释放。...链表的每个节点就是一个结构体变量,节点里有一个或者两个指针,可以保存上一个节点和下一个节点的地址,方便遍历链表,删除、插入节点时定位位置。 2....实现的功能如下: 初始化链表头 插入节点的函数(链表任意位置插入,链表尾插入) 删除节点的函数(链表任意位置删除、链表尾删除) 遍历链表,输出链表里的所有信息 #include #include...找到链表尾 if(head!...案例: 创建双向链表循环,实现插入、删除、遍历 双向链表在每个节点里新增加了一个指针,用于保存上一个节点的地址,现在的节点里一个用两个指针,一个保存上一个节点的地址,一个保存下一个节点的地址。

2.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    双向链表---C语言实现

    【Linux】常用指令详解一(mkdir -p、mkdir、cd +[目录名]、pwd)-腾讯云开发者社区-腾讯云 作者:池央文章介绍了Linux中常见指令的一些应用,是适合Linux初学者学习的一篇优质好文...一、双向链表的介绍上文我们实现了单链表,本文我们来实现带头双向循环链表,简称双向链表。...带头双向循环中的带头指的是带头结点,也就是带哨兵位,双向链表中的哨兵位不存储任何有效数据,哨兵位后的第一个结点才是第一个有效节点;双向指的是既可以从前往后遍历链表,也可以从后往前遍历链表;循环指的是链表是头尾相连的...如图:二、双向链表的实现2.1定义双向链表节点的结构双向链表的结点由三个部分组成,一个部分用来保存当前节点存储的数据,一个部分用来保存下一个结点的地址,即next指针,还有一个部分用来保存前一个节点的地址...,头指针指向为空,而当双向链表为空时,头指针指向头结点,所以创建双向链表需要初始化一个哨兵位。

    11220

    双向链表

    双向链表应用实例 2.1 双向链表的操作分析和实现 使用带 head 头的双向链表实现 –水浒英雄排行榜 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。...由于之前已经做过单链表的基础操作,理论上来上手双向链表的比较简单的,可以直接看代码就理解,这里不多废话。...双向链表无非多了一个pre(前一个数) 分析 (1) 遍历 和 单链表一样,只是可以向前,也可以向后查找。...(2) 添加 (默认添加到双向链表的最后) 先找到双向链表的最后这个节点 temp.next = newHeroNode newHeroNode.pre = temp (3) 修改 思路和 原来的单向链表一样...temp; //然后换掉temp.net temp.next = heroNode; } } // 修改一个节点的内容, 双向链表的节点内容修改和单向链表一样

    56420

    双向链表

    双向链表       在线性链式存储结构的结点中只有一个指示直接后继的指针域,由此,从某个结点出发只能顺指针往后寻查其他结点。若要寻查结点的直接前趋,则需从表头指针出 发。...双向链表是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。所以在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱。...//线性表的双向链表存储结构 typedef struct DulNode { ElemType data; struct DulNode *prior; //直接前驱指针 struct...DulNode *next; //直接后继指针 }DulNode , *DuLinkList;       双向链表既然是比单链表多了如可以反向遍历查找等数据结构,那么也就需要付出一些小的代价:在插入和删除时...数据结构声明 19 /******************************************************************************/ 20 /* 线性表的双向链表存储结构

    1.1K51

    【C】数据结构之双向链表

    介绍 双向链表与单链表大体上差不多,都是不连续的存储结构,顾名思义,双向链表与单链表不同的是,双链表是双向的,而单链表只能向后节点移动,是单向的;需要注意的是:双链表是带头的,也就是在头部有一个哨兵位,...双链表的全称就是双向带头循环链表。...typedef struct ListNode { DataType data; struct ListNode* pre; struct ListNode* next; }LTnode; 相比单链表多了一个前躯节点...,链表就为空;这里头插是在 图中d1的前面,head的后面插入,而d1可以用head->next来表示,先将newnode的前后指针指向head和d1,然后改变d1的前指针,最后改变head的后指针;...=pphead); LTnode* next = pphead->next->next;//原链表的第3个节点 LTnode* del = pphead->next;//原链表的第2个节点 pphead

    6010

    Linux内核中双向链表的经典实现

    概要 本文对双向链表进行探讨,介绍的内容是Linux内核中双向链表的经典实现和用法。其中,也会涉及到Linux内核中非常常用的两个经典宏定义offsetof和container_of。...内容包括: 1.Linux中的两个经典宏定义 2.Linux中双向链表的经典实现 Linux中的两个经典宏定义 倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of...Linux中双向链表的经典实现 1.Linux中双向链表介绍 Linux双向链表的定义主要涉及到两个文件: include/linux/types.h include/linux/list.h Linux...中双向链表的使用思想 它是将双向链表节点嵌套在其它的结构体中;在遍历链表的时候,根据双链表节点的指针获取"它所在结构体的指针",从而再获取数据。...3.Linux中双向链表的使用示例 双向链表代码(list.h): 1 #ifndef _LIST_HEAD_H 2 #define _LIST_HEAD_H 3 // 双向链表节点 4 struct

    2.7K30

    【链表】双向循环带头链表-增-删-查(C语言)

    ---- ---- 单链表存在的缺陷: 不能从后往前走, 找不到他的前驱, 指定位置 删除 增加 尾删 都要找前一个,时间复杂度都是O(n) ---- 针对上面的这些缺陷的解决方案——双向链表。...---- 实际中要实现的链表的结构非常多样,以下情况组合起来就有8种链表结构: 单向、双向 带头、不带头——带哨兵位的头结点,这个结点不存储有效数据,好处是什么?...带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头循环双向链表,另外,这个结构虽然复杂,但是使用代码代码实现的以后会发现结构带来许多优势,实现反而简单了。...---- 带头双向循环链表 结构体创建 typedef int LSTNodeData; typedef struct ListNode { LSTNodeData data; struct ListNode...空 return true; } else { //不为空 return false; } } 优化 为了更快的实现一个双向循环的带头链表,我们可以直接利用Insert和Erase。

    29400
    领券