数据结构与算法Java版——双向链表
来源:互联网 发布:轩辕剑 还原数据库 编辑:程序博客网 时间:2024/05/16 09:46
今天分享的是双向链表的实现,双向链表其实很容易实现,只需要在节点Node类加一个前置节点的属性,再让其指向上一个节点就可以完成,还要注意的点就是双线链表的查询操作可以从head节点或tail节点开始,即双向查询。其他步骤和单链表就相似了。
这个学期学习的数据结构这本书,所以我打算用Java实现其中表,队,栈,树。如果你有兴趣可以持续关注我后续操作。我的CSDN地址为
public Node getNodeByIndex(int index){ if(index<0||index>size-1){ throw new IndexOutOfBoundsException("索引越界"); } //如果索引在前半段,则从head开始向后搜索,否则从tail开始向前搜索 if(index<=size/2){ Node node=head; for(int i=0;i<=size/2;i++,node=node.next) { if(i==index) { return node; } } }else{ Node node=tail; for(int i=size-1;i>size/2;i++,node=node.pre) { if(i==index) { return node; } } } }
基本上单链表与双向链表区别就在这一部分,剩下的只需要注意插入删除节点时,需要记得是双向的,新插入的节点pre和next都需要分别指向前后节点,删除也要两边都要断开就像下图所示:
剩下的操作就和单链表一样了,如果有何不明白可以参考我上一篇文章:数据结构与算法Java版——单链表的实现,到此所有表的实现就基本完成了。
我们学习Java其实经常用到表,List就是我们常用的表,ArrayList就是顺序表的实现,LinkList是双向链表,两者各不同,所以用表的时候一定要考虑常用操作是什么,再来选择用什么表,最后附上两者优点与缺点表:
顺序表 链表 优点 顺序表中逻辑顺序与物理存储顺序一致,所以查找和读取时行性能强大 链表采用链式结构保存元素,所以插入删除时性能好;存储空间是动态分布的,因此空间不会像数组一样浪费。 缺点 每个顺序表底层都是一个数组实现的,所以存在着部分内存浪费;执行插入和删除时性能不好,可能需要移动大量的元素。 链表需要空间保存指针,所以会要牺牲一些空间。
阅读全文
0 0
- 数据结构与算法Java版——双向链表
- java数据结构与算法-双向链表
- 数据结构算法——双向链表
- 数据结构与算法-----双向线性链表
- 算法与数据结构之双向链表
- [数据结构与算法]双向链表
- 数据结构与算法:双向链表
- 数据结构与算法(双向链表)
- 数据结构与算法python版(二)--双向链表
- 数据结构与算法专题之线性表——链表(二)双向链表
- 数据结构与算法——线性表链式存储(双向循环链表)
- 数据结构与算法(C语言描述)——双向链表
- 头疼的算法与数据结构——双向循环链表
- 学习JavaScript数据结构与算法(四)——双向链表
- Java实现数据结构与算法-链表与双向链表
- Java数据结构和算法——数组、单向链表、双向链表
- Java数据结构和算法——数组、单向链表、双向链表
- Java数据结构与算法分析《五》双端链表和双向链表
- 第三周JavaScript学习记录
- java中String相关操作方法
- 微信小程序二维码解析遇到的问题
- webpack入门(1)
- THREE.js案例源码学习-geometry_birds
- 数据结构与算法Java版——双向链表
- 解决mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists
- shell循环etl跑历史数据
- 一篇随笔
- GCD信号量控制并发
- Object转Flaot解决方案
- 解决Firefox不响应window.resize事件
- 使用Spark完成基于TF-IDF特征的新闻热点聚类
- NIO系列(五)——Udp协议(DatagramChannel)