当前位置: 首页 > 后端技术 > Node.js

前端算法系列二:数据结构链表、双向链表、闭环链表、有序链表

时间:2023-04-03 16:52:20 Node.js

前言上次我们讲了数据结构:栈和队列,对它们的使用做了一些介绍和案例实践;还讲了如何简单实现一个四次算术运算,如何判断一个标签是否完全闭合等等,总之今天给大家介绍一些数据结构:上一篇:前端算法系列之一:时间复杂度,空间复杂度,数据结构栈和队列。链表是一种什么样的结构?链表是一种可以将数据串联起来的结构。每个元素都会有一个指向下一个元素的指针(末尾没有普通的链表),就像现实世界中的火车一样。按指针分可分为:单向链表、双向链表、循环链表;链表首先会有一个表头,表头作为起始指针,然后每个元素称为节点(node);每个节点都有一个指向下一个节点(next)的指针,直到链表结束,指针会指向undefined;链表的实现1、节点节点的创建和定义;每个节点都会有一个属性(元素)来保存自己的数据,然后会有一个Pointer(next)exportclassNode{constructor(element,next=null){this.element=element;这个.下一个=下一个;}}2.链表的apigetElementAt(position):获取某个位置的元素append(element):添加一个元素到链表的末尾removeAt(idx):移除一个元素insert(element,position=0,dir='before'):在指定位置添加一个元素insertAfter(element,position):在指定位置之后添加元素size():链表的长度remove():删除链表的尾元素removeAll():删除整个链表isEmpty():检查链表是否为空import{defaultEquals}from"../util.js";import{Node}from'./Node.js'exportdefaultclassLinkedList{构造函数(equalsFn=defaultEquals){this.count=0;你s.head=null;this.equalsFn=equalsFn;}getElementAt(position){if(position>=0&&position<=this.count){letnode=this.head;for(leti=0;i=this.count){returnthis.append(element);}常量节点=新节点(元素);consttargetNode=dir==='之前'?this.getElementAt(位置-1):this.getElementAt(位置);if(!targetNode){让prev=this.head;this.head=节点;node.next=prev;}else{让下一个;next=targetNode.nexttargetNode.next=节点;node.next=下一个;}这个计数++;返回元素;}5、删除一个元素removeAt(idx){if(idx>=0&&idx=0&&position<=this.count){if(position>this.count/2){letcur=this.tail;对于(让我=这个.count-1;我>位置;i--){cur=cur.prev;}返回当前;}else{returnsuper.getElementAt(position)}}returnundefined;}removeAll(){super.removeAll();this.tail=null;}removeAt(position){if(position>=0&&position=this.count){returnthis.append(element);}constnode=newDoubleNode(元素);让我们;consttargetNode=dir==='之前'?this.getElementAt(位置-1):this.getElementAt(位置);如果(!targetNode){cur=this.head;node.next=当前;cur.prev=节点;this.head=节点;}else{让下一个;next=targetNode.nexttargetNode.next=节点;node.prev=targetNode;node.next=下一个;next.prev=节点;}这个计数++;返回元素;}移除一个元素同上,只是修改节点的前后指针,这里不再赘述,查看源码https://github。com/JasonCloud/DataStructuresAndAlgorithmsClosed-looplinkedlist闭环链表,又称环,是一种封闭结构,尾部会指向有序链表的头部。有序链表在追加元素时进行排序并相加,得到有序链表。比较函数可以根据实例化时传入的比较函数equalIsFn;想要获得第一手资讯,请关注我的专栏或关注公众号