双链表的相关操作(定义,后插,删除,遍历)
双链表的相关操作
- 双链表的定义
- 双链表的插入(后插)
- 双链表的删除
- 销毁双链表
- 双链表的遍历
- 后向遍历
- 前向遍历
- 跳过头结点
- 主函数
双链表的定义
typedef struct DNode {ElemType data;struct DNode* prior, * next;
}DNode, * DLinklist;
//----------双链表的初始化(带头结点)----------
bool InitDLinkList(DLinklist& L) {L = (DNode*)malloc(sizeof(DNode)); //分配一个头结点if (L == NULL) //内存不足,分配失败return false;L->prior = NULL; //头结点的prior永远指向NULLL->next = NULL; //头结点之后暂时还没有节点return true;
}
双链表的插入(后插)
//在p结点之后插入s结点
bool InsertNextNode(DNode* p, DNode* s) {if (p == NULL || s == NULL) //非法参数return false;s->next = p->next; //①将结点*s插入到结点*p之后if (p->next != NULL) //如果p结点有后继结点p->next->prior = s; //②s->prior = p; //③p->next = s; //④return true;
}
按位序插入和前插操作都可以转化为后插操作
双链表的删除
bool DeleteNextNode(DNode* p) {if (p == NULL) //非法参数return false;DNode* q = p->next; //找到p的后继结点qif (q == NULL)return false; //p没有后继p->next = q->next; //①if (q->next != NULL) //q结点不是最后一个结点q->next->prior = p; //②free(q); //释放结点空间return true;
}
销毁双链表
void DestoryList(DLinklist& L) {//循环释放各个数据结点while (L->next != NULL)DeleteNextNode(L);free(L); //释放头结点L = NULL; //头指针指向NULL
}
双链表的遍历
后向遍历
while (p != NULL) {//对结点p做相应处理,如打印p = p->next;
}
前向遍历
while (p != NULL) {//对结点p做相应处理p = p->prior;
}
跳过头结点
while (p->prior != NULL) {//对结点p做相应处理p = p->prior;
}
双链表不可随机存储,时间复杂度O(n)
主函数
void testLinkList() {//初始化双链表DLinklist L;InitDLinkList(L);......
}
双链表的相关操作(定义,后插,删除,遍历)相关推荐
- 【Liunx常用操作】LVM逻辑卷的介绍和相关操作(创建、删除、扩缩容)
[Liunx常用操作]LVM逻辑卷的介绍和相关操作 提示:为保证文章的正确性和实用性,文章内容作者会不断优化改进,若您有建议或者文章存在错误请留言或评论指正. 前言 LVM(Logical Volum ...
- 双链表初始化、头插、尾插、头删、尾删、任意位置插入和删除、判空、销毁、打印、查找操作
ListNode* buyDListNode(LTDataType data) {ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));if ...
- 数据结构(单链表的相关操作)
为什么80%的码农都做不了架构师?>>> #include <stdio.h> #include <stdlib.h> #define ElemType ...
- 链表的相关操作-数据结构与算法(北航991数据结构)
数据结构与算法(北航991数据结构) 下面的这一段代码是针对于这30道题而写的关于单向链表,双向链表以及循环链表等链表的创建及遍历,做辅助使用. 所有题目均是自己理解敲的,并执行成功的.可能会存在一起 ...
- 关于链表的相关操作与问题
这篇博文仅记录有关链表的操作,供回忆与参考. 1.概述 链表在我看来是储存数据的工具,原理上讲表上每一个节点有两个属性,也可以说是格子,第一个存放数据,第二个存放下一个节点地址.最后一个节点只存放数据 ...
- redis进阶:mysql,redis双写一致性,数据库更新后再删除缓存就够了吗?
0. 引言 最近线上的一个状态修改功能出现了问题,一开始是运营找了过来,运营告知某条数据的状态已经开启了的,但是实际使用起来还是没有生效,于是拿到这个问题后,首先就去数据库查了这条数据,发现确实如他所 ...
- python自动获取cookie_selenium3+python自动化12-cookie相关操作(获取和删除)
前言 在进行接口测试或者自动化测试时,有时就要登录好多次,特别麻烦,那能不能不要一遍一遍输入账号,直接跳过登录页面进行操作.这个时候就要用到cookie,这次主要整理cookie的一些操作,包含获取c ...
- .net ajax批量删除,asp.net 全部选中与取消操作,选中后的删除(ajax)实现无刷新效果...
前台代码 : 用户信息操作 //页面的初始化 $(document).ready( function(){ loadUserInfo(); }); //加载用户信息到页面 function loadU ...
- 双链表——双链表的定义及其基本操作(初始化、头插法尾插法建表、插入、查找、删除、判空等)
文章目录 双链表的定义 双链表上的操作 初始化 插入操作 建立双链表 头插法建立双链表 尾插法建立双链表 遍历操作 求双链表的长度 查找操作 按值查找 按位查找 删除操作 判空操作 完整代码及实例 总 ...
最新文章
- android开发学习 ------- 弹出框
- 【Flutter】Flutter 混合开发 ( 关联 Android 工程与 Flutter 工程 | 安卓页面中嵌入 Flutter 页面 | 安卓中启动 Flutter 页面 )
- CryptAPI和openssl交互使用
- 我会铭记这一天:2016年10月25日
- 1.4Hadoop伪分布式安装
- CCNET自动构建之路
- 力扣1716.计算力扣银行的钱
- 速成pytorch学习——9天构建模型的3种方法
- 数据库-SQL Server2005-第4季SQL从入门到提高-2SQL Server使用
- 达梦数据库修改字段长度_达梦数据库,国产数据库替代的希望之星
- PRAE插件开发遇到的一个坑
- TheFatRat生成免杀木马(powershell)报错问题
- php fseek函数,php fseek函数怎么用 - fseek
- JUCE框架教程(4)—— Slider Class入门
- Spring Gateway 报错java.lang.IllegalStateException: COMPLETED 解决
- Ajax 与异步数据传输
- Chromebook + Crouton
- 5G扬帆 -- 2022中国国际信息通信展推出数字医疗健康展区
- OpenCV学习——实现滑动条式调色板
- 百度地图根据轨迹计算路程_百度张传明:疫情下的“活”导航是如何炼成的