算法学习之数据结构之双向链表
来源:互联网 发布:菜刀连接数据库 编辑:程序博客网 时间:2024/05/19 18:48
双链表的没一个元素都是对象,每个对象包含一个关键字域和两个指针域(next,prev)。当然,每个对象还可能包含一些其他的卫星数据。next指向后继节点,prev指向前驱节点。如果prev[x] == null,则无前驱节点,是head头节点。如果next[x] == null则无后继节点,是最后一个节点,即尾节点tail。
双链表的具体操作如下:
双向链表的插入:insert(L, x)
next[x]=head[L] //头插法,当前节点x的下一个节点指向头节点if head[L] != null // 头节点不为空 then prev[head[L]] = x //头节点的上一个节点指向xhead[L] = x //重置头节点prev[x] = null //头节点的上一个节点置为空
搜索:
search(L, k)x = head[L]while x != null and key[x] != k do x = next[x]return x;
删除:
delete(L, x)if(prev[x] != null) //如果当前节点不是头节点 then next[prev[x]] = next[x] //当前节点x的上个节点的下一个节点置为当前节点x的下一个节点 else head[L] = next[x] //否则头节点置为当前节点x的下一个节点if next[x] != null then prev[next[x]] = prev[x] // 当前节点x的下个节点的上一个节点置为当前节点x的上一个节点
哨兵nil[L],有其他元素一样的各个域
可以简化边界条件,将双向链表变成带哨兵的环形双向链表,哨兵元素介于头和尾之间,next[nil[L]]指向头节点,prev[nil[L]]指向尾节点,同样表头的prev域和表尾的next域都指向nil[L],这样可以吧head[L]换成next[nil[L]]。
插入:
next[x] = next[nil[L]]prev[next[nil[L]] = xnext[nil[L]] = xprev[x] = null
删除:
next[prev[x]] = next[x]prev[next[x]] = prev[x]
- 算法学习之数据结构之双向链表
- 算法与数据结构之双向链表
- 《数据结构和算法》之双向链表
- 数据结构学习之双向链表
- 数据结构学习之双向链表结构
- 数据结构学习之双向链表结构
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 数据结构之双向链表
- 算法与数据结构之四----双向链表
- "双向链表"-数据结构算法-之通俗易懂,完全解析
- 《数据结构和算法》之双向链表问题实践
- redis一些常见常用的配置参数的简单说明
- 获取PE文件自校验值
- 避免QComboBox下拉选项重复的好方法,一试就爽
- intellij创建快捷方式到桌面
- 委托代理(degegate)的理解和使用示例
- 算法学习之数据结构之双向链表
- 第4章 存储器
- centos清理内存命令
- Windows Phone 游戏 Galaga Legions DX 去除 XBL 服务
- JSTL标签的问题(尚学堂OA项目开发阶段)
- hdu 4396 spfa
- 挂载远程文件系统nfs
- java实现各种算法
- Java时间日期格式转换