数据结构与算法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
原创粉丝点击