
双链表初始化、插入、删除、遍历等操作的分析(C语言)
发布日期:2021-05-04 14:30:53
浏览次数:32
分类:技术文章
本文共 1666 字,大约阅读时间需要 5 分钟。
一、双链表初始化、插入、删除、遍历等操作的分析
1. 单链表 VS 双链表

2. 双链表的初始化(带头结点)
DLinklist
:强调是一个链表。DNode *
:强调是一个结点。
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永远指向NULL L -> next = NULL; //头结点之后暂时还没有结点 return true;}//判断双链表是否为空(带头结点)bool Empty(DLinklist L){ if(L -> next == NULL) return true; else return false;}void testDLinkList(){ //初始化双链表 DLinklist L; InitDLinkList(L); //后续代码....}
3. 双链表的插入
//在p结点之后插入s结点bool InsertNextDNode(DNode *p, DNode *s){ if(p==NULL || s==NULL) //非法参数 return false; s -> next = p -> next; if(p->next != NULL) //如果p结点有后继节点 p -> next -> prior = s; s -> prior = p; p -> next = s; return true;}

4. 双链表的删除


//删除p结点的后继节点bool DeleteNextDNode(DNode *p){ if(p == NULL) return false; DNode *q = p -> next; //找到p的后继节点q if(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) DeleteNextDNode(L); free(L); //释放头结点 L = NULL; //头指针指向NULL}
5. 双链表的遍历
- 后向遍历
while (p!=NULL){ //对结点p做相应处理,如打印 p = p->next;}
- 前向遍历
while (p!=NULL){ //对结点p做相应处理 p = p->prior;}
- 前向遍历(跳过头结点)
while (p-> prior != NULL){ //对结点p做相应处理 p = p->prior;}
- 双链表不可随机存取,按位查找、按值查找操作都只能用遍历的方式实现。
- 时间复杂度 O(n)
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月01日 11时53分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
UltraEdit不产生bak 文件可能不是DOS格式
2019-03-01
云计算-大数据-云安全高等教育改革示范教材
2019-03-01
Web站点安全监控
2019-03-01
使用MaxCompute进行数据质量核查
2019-03-01
JavaScript 自学手册(文档教程)
2019-03-01
Java语言特点与学习
2019-03-01
阿里云数据库MySQL版快速上手!
2019-03-01
数据库表设计-------三个范式
2019-03-01
夜光带你走进Vue.js(三十二)擅长的领域
2019-03-01
夜光精讲 Opentcs 三大算法(十三)调度算法
2019-03-01
导入工程时出现错误
2019-03-01
BCGControlBar教程:应用向导
2019-03-01
MyEclipse教程:Web开发——部署并测试项目
2019-03-01
【更新】CLion v2018.3发布(六):VCS和插件
2019-03-01
文件服务器——src文件夹
2019-03-01
从零构建通讯器--5.2三次握手,telnet,wireshark
2019-03-01
如何判断两个浮点数是否相等?
2019-03-01