最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript数据结构之双向链表定义与使用方法示例

来源:懂视网 责编:小采 时间:2020-11-27 22:26:46
文档

JavaScript数据结构之双向链表定义与使用方法示例

JavaScript数据结构之双向链表定义与使用方法示例:本文实例讲述了JavaScript数据结构之双向链表定义与使用方法。分享给大家供大家参考,具体如下: 双向链表和普通链表的区别在于,在链表中,一个节点只有链向下一个节点的链接,而在双向链表中,链接是双向的:一个链向下一个元素,另一个链向前一个元素。
推荐度:
导读JavaScript数据结构之双向链表定义与使用方法示例:本文实例讲述了JavaScript数据结构之双向链表定义与使用方法。分享给大家供大家参考,具体如下: 双向链表和普通链表的区别在于,在链表中,一个节点只有链向下一个节点的链接,而在双向链表中,链接是双向的:一个链向下一个元素,另一个链向前一个元素。

本文实例讲述了JavaScript数据结构之双向链表定义与使用方法。分享给大家供大家参考,具体如下:

双向链表和普通链表的区别在于,在链表中,一个节点只有链向下一个节点的链接,而在双向链表中,链接是双向的:一个链向下一个元素,另一个链向前一个元素。

双向链表提供了两种迭代列表的方法:从头到尾,或者反过来。我们也可以访问一个特定节点的下一个或前一个元素。在单向链表中,如果迭代列表时错过了要找的元素,就需要回到列表起点,重新开始迭代。这是双向链表的一个优点。

function DoubleLink(){
 var length=0;//链表长度
 var head=null;//头结点的引用
 var tail=null;//尾节点的引用
 function Node(e){
 this.element=e;
 this.next=null;
 this.previous=null;
 }
 this.insertAt=function(position,e){//在任意位置添加节点
 if(position>=0&&position<=length){//判断边界
 var node=new Node(e);
 var current=head;
 var previous;
 var index=0;
 if(position==0){//在第一个位置添加
 if(!head){//链表为空的时候添加第一个节点
 head=node;
 tail=node;
 }else{
 current=head;
 node.next=current;
 current.previous=node;
 head=node;
 }
 }else if(position==length){//在链表末尾添加
 current=tail;
 current.next=node;
 node.previous=current;
 tail=node;
 }else{
 while(index<position){
 previous=current;
 current=current.next;
 index++;
 }
 previous.next=node;
 node.previous=previous;
 node.next=current;
 current.previous=node;
 }
 length++;
 return true;
 }else{
 return null;
 }
 }
 this.removeAt=function(position){//删除任意位置的节点
 if(position>-1&&position<length){//边界判断
 var current=head;
 var previous;
 var index=0;
 if(position==0){//删除第一个位置的节点
 head=current.next;
 if(length==1){//如果只有一项
 tail=null;
 }else{
 head.previous=null;
 }
 }else if(position==length-1){//删除最后一项
 current=tail;
 tail=current.previous;
 tail.next=null;
 }else{
 while(index<position){
 previous=current;
 current=current.next;
 index++;
 }
 previous.next=current.next;
 current.next.previous=previous;
 }
 length--;
 return current.element;
 }else{
 return null;
 }
 }
 this.indexOf=function(e){//获取节点位置,从头开始数
 var current=head;
 var index=0;
 while(current){
 if(current.element==e){
 return index;
 }
 current=current.next;
 index++;
 if(index>=length)return null;
 }
 }
 this.isEmpty=function(){//判断链表是否为空
 return length==0;
 }
 this.mylength=function(){//链表长度
 return length;
 }
 this.print1=function(){//从头到尾打印链表
 var current=head;
 while(current){
 console.log(current.element);
 current=current.next;
 }
 }
 this.print2=function(){//从尾到头打印链表
 var current=tail;
 while(current){
 console.log(current.element);
 current=current.previous;
 }
 }
 this.getHead=function(){//获取头节点
 return head;
 }
 this.getTail=function(){//获取尾节点
 return tail;
 }
}
var link=new DoubleLink();//实例化一个对象
link.insertAt(0,'d');
link.insertAt(1,'e');
link.insertAt(2,'f');
link.insertAt(3,'g');
link.insertAt(4,'h');
link.insertAt(5,'i');
link.insertAt(6,'j');
link.insertAt(7,'k');
link.removeAt(7);
link.removeAt(0);
link.print1();//efghij
link.print2();//jihgfe
console.log(link.getHead());//e
console.log(link.getTail());//j
console.log(link.indexOf('f'));//1

运行结果:

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

JavaScript数据结构之双向链表定义与使用方法示例

JavaScript数据结构之双向链表定义与使用方法示例:本文实例讲述了JavaScript数据结构之双向链表定义与使用方法。分享给大家供大家参考,具体如下: 双向链表和普通链表的区别在于,在链表中,一个节点只有链向下一个节点的链接,而在双向链表中,链接是双向的:一个链向下一个元素,另一个链向前一个元素。
推荐度:
标签: 操作 数据 js
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top