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

【访谈题目】数据结构与算法-JS灵魂

时间:2023-04-03 16:02:12 Node.js

数据结构与算法-JS灵魂Tags(以空格分隔):Uncategorized数据结构:Stack:遵循先进后出原则的有序集合(后进先出法);新加入或待删除的元素存放在栈尾,称为栈顶,另一端为栈底。在栈中,新元素靠近栈顶,旧元素靠近栈底。类Stack{构造函数(){this.items=[]}push(element){this.items.push(element)}pop(){returnthis.items.pop()}clear(){this.items=[]}print(){console.log(this.items.toString())}//属性获取peek(){returnthis.items[this.items.length-1]}getsize(){returnthis.items.length}}Queue:与上面相反,一个有序的项目集合,遵循FIFO(先进先出)原则;队列在尾部添加新元素并从头部删除元素。最近添加的元素必须在队列的末尾。类队列{构造函数(项目){this.items=项目||[]}//通用队列enqueue(element){this.items.push(element)}//优先队列的构造方法//enqueue(element,priority){//constqueueElement={element,priority}//if(this.isEmpty){//this.items.push(queueElement)//}else{//constpreIndex=this.items.findIndex((item)=>queueElement.priority-1){//this.items.splice(preIndex,0,queueElement)//}else{//this.items.push(queueElement)//}//}//}dequeue(){返回这个。items.shift()}front(){returnthis.items[0]}clear(){this.items=[]}print(){console.log(this.items.toString())}获取大小(){returnthis.items.length}getisEmpty(){return!this.items.length}}//循环队列,要点在于index的计算classLoopQueueextendsQueue{constructor(items){super(items)}getIndex(index){constlength=this.items.length返回索引>长度?(index%length):index}find(index){return!this.isEmpty?this.items[this.getIndex(index)]:null}}linkedlist:storage元素的有序集合,但与数组不同,链表中的元素在内存中不是连续放置的;每个元素都包含一个存储元素本身的节点和一个指向下一个元素的引用(指针/链接)classlinkNode{constructor(ele){this.element=ele;这个.下一个=空;}}classsingLinkList{constructor(){this.item=[];this.head=null;这个.length=0;}追加(ele){constnode=newlinkNode(ele);让当前=空;如果(this.head){this.head=node;}else{current=this.head;while(current.next){current=current.next;};当前.下一个=节点;}这个长度++;}insert(pos,ele){if(pos>0&&pos<=this.length){constnode=newlinkNode(ele);让current=this.head;让前一个=空;让索引=0;if(pos===0){this.head=node;}else{while(index-1&&pos{if(!node&&!node.element)returnundefinedif(Object.is(node.element.key,key)){returnnode.element.value}else{returngetElementValue(node.next)}}returngetElementValue(this.table[position].head)}remove(key){constposition=HashTable.loseloseHashCode(key)if(this.table[position]===undefined)returnundefinedconstgetElementValue=node=>{if(!node&&!node.element)returnfalseif(Object.is(node.element.key,key)){this.table[position].remove(node.element)if(this.table[position].isEmpty){this.table[position]=undefined}returntrue}else{returngetElementValue(node.next)}}returngetElementValue(this.table[position].head)}////使用线探查//put(key,value){//constposition=HashTable.loseloseHashCode(key)//if(this.table[position]===undefined){//this.table[position]={key,值}//}else{//让索引=位置+1;//while(this.table[index]!==undefined){//index++//}//this.table[index]={key,value}//}//}//get(key){//constposition=HashTable.loseloseHashCode(key)//constgetElementValue=index=>{//if(this.table[index]===undefined)returnundefined//if(Object.is(this.table[index].key,key)){//returnthis.table[index].value//}else{//返回getElementValue(index+1)//}//}//returngetElementValue(position)//}}树:n(n>=1)个有限节点的集合,具有层级关系;之所以叫“树”,是因为它看起来像一棵倒过来的树,也就是说它是根向上,叶子向下,基本上是一对多的关系,树也可以看成是图Node的一种特殊形式根节点内部节点:非根节点和有子节点的节点外部节点/页面节点:没有子节点节点的子树:是由大节点和小节点组成的树深度:从节点到节点的节点数根节点高度:树的高度取决于所有节点深度的最大值一个节点最多可以有两个孩子:一个是左孩子,一个是右孩子。这些定义帮助我们编写更有效的算法,用于从树中插入、查找和删除节点。二叉树在计算机科学中被广泛使用。二叉搜索树(BST)是二叉树的一种,但它只允许你在左节点存储小于(比父节点)的值和大于(或等于)值(比父节点))在正确的节点中。classbinNode{constructor(key){this.key=keythis.left=nullthis.right=null}}classBinarySearchTree{constructor(){this.root=null}insert(key){constnewNode=newbinNode(key)constinsertNode=(node,newNode)=>{if(newNode.key