JavaScript数据结构链表知识详解
最近在看《javascript数据结构和算法》这本书,补一下数据结构和算法部分的知识,觉得自己这块是短板。
链表:存储有序的元素集合,但不同于数组,链表中的元素在内存中不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。
好处:可以添加或移除任意项,它会按需扩容,且不需要移动其他元素。
与数组的区别:
数组:可以直接访问任何位置的任何元素;
链表:想要访问链表中的一个元素,需要从起点(表头)开始迭代列表直到找到所需的元素。
做点小笔记。
functionLinkedList(){ varNode=function(element){ this.element=element this.next=null } varlength=0 varhead=null this.append=function(element){ varnode=newNode(element) varcurrent if(head==null){//链表为空 head=node }else{//链表不为空 current=head //循环链表,直到最后一项 while(current.next){ current=current.next } current.next=node } length++//更新链表长度 } this.insert=function(position,element){ varnode=newNode(element) varcurrent=head varprevious varindex=0 if(position>=1&&position<=length){//判断是否越界 if(position===0){//插入首部 node.next=current head=node }else{ while(index++<position){ previous=current current=current.next } node.next=current previous.next=node } length++//更新链表长度 returntrue }else{ returnfalse } } this.indexOf=function(element){ varcurrent=head varindex=-1 while(current){ if(element===current.element){ returnindex } index++ current=current.next } return-1 } this.removeAt=function(position){ if(position>-1&&position<length){//判断是否越界 varcurrent=head varprevious varindex=0 if(position===0){//移除第一个元素 head=current.next }else{ while(index++<position){ previous=current current=current.next } previous.next=current.next//移除元素 } length--//更新长度 returncurrent.element }else{ returnnull } } this.remove=function(element){ varindex=this.indexOf(element) returnthis.removeAt(index) } this.isEmpty=function(){ returnlength==0 } this.size=function(){ returnlength } this.toString=function(){ varcurrent=head varstring="" while(current){ string=","+current.element current=current.next } returnstring.slice(1) } this.getHead=function(){ returnhead } }
以上所述是小编给大家介绍的JavaScript数据结构链表知识详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!