栈结构栈是一个遵循先进后出(LIFO)原则的有序集合。新加入或待删除的元素存储在栈的同一端,称为栈顶,另一端称为栈底。新元素靠近栈顶,旧元素靠近栈底。栈的一些方法push(element(s)):向栈顶添加一个或几个新元素pop():移除栈顶元素并返回移除的元素peek():返回元素在栈顶,不对栈做任何改变(该方法不会移除栈顶元素,只是返回)isEmpty():如果栈中没有元素,则返回true,否则返回falseclear():移除栈中的所有元素size():返回栈中元素的个数。这个方法类似于数组的长度创建一个类来表示栈并声明这些方法classStack{constructor(){this.items=[]}//push在栈顶添加一个新元素push(element){this.items.push(element)}//移除栈顶元素,同时返回移除的元素pop(){returnthis.items.pop()}//peekreturns堆栈顶部的元素而不对堆栈进行任何更改(此方法不会从堆栈中删除顶部项目,只是返回它)peek(){returnthis.items[this.items.length-1]}//isEmpty如果栈中没有元素则返回true,否则返回falseisEmpty(){returnthis.items.length===0}//size返回栈中元素的个数,该方法类似于数组的length属性size(){returnthis.items.length}//clea用于移除栈中的所有元素,清空栈clear(){returnthis.items=[]}}来使用theStack类,首先需要初始化Stack类并添加元素,因为此时栈中的元素为空,调用isEmpty方法会返回tureconststack=newStack()stack.push('MonkeyKing')stack.push('孙悟空')stack.push('猪八戒')stack.push('和尚沙')console.log(stack.items)//打印栈中元素个数console.log(stack.pop())//移除栈顶元素(LIFO是先进后出,所以移除SandMonk)console.log(stack.items)//这时,执行完上一步后,栈中有3个元素。console.log(stack.peek())//查看栈顶元素是猪八戒console.log(stack.isEmpty())//falseconsole.log(stack.size())//3console.log(stack.clear())//0用栈解决实际问题(十进制转二进制)//十六进制转换函数dec2bin(num){conststack=newStack()//如果循环次数不确定,使用一个while循环。当num大于0时,while循环继续while(num>0){letremainder=num%2//取余数num=Math.floor(num/2)//使用Math.floor向下舍入栈.push(余数);//将得到的数压入栈中}//console.log(stack.items)//将这个栈中的元素一个一个弹出,得到letbinString=""while(!stack.isEmpty()){binString+=stack.pop()}returnbinString}console.log(dec2bin(100))//1100100队列结构队列遵循先进先出(FIFO,又称先来先服务)原则,一组有序队列,在尾部添加新元素并从顶部移除元素。新添加的元素必须在队列的尾部队列的一些方法enqueue(element(s)):向队列尾部添加一个(或多个)新元素。dequeue():移除队列的第一项(队列最前面的项)并返回移除的元素。peek():返回队列中的第一个元素-最先添加也将最先删除的元素。队列不做任何改变(不移除元素,只返回元素信息——非常类似于stack类的peek方法)。该方法在其他语言中也可以称为前端方法。isEmpty():如果队列不包含任何元素则返回true,否则返回false方法类队列{constructor(){this.items=[]}enqueue(element){this.items.push(element)}dequeue(){returnthis.items.shift()}peek(){if(this.items.length===0)returnnullreturnthis.items[0]}isEmpty(){returnthis.items.length===0}size(){returnthis.items.length}}使用队列类const队列=新队列()队列。enqueue("孙悟空")queue.enqueue("猪八戒")queue.enqueue("和尚沙")queue.enqueue("小傻瓜")console.log(queue.items)console.log(queue.dequeue())//移除队列中的第一个孙悟空console.log(queue.items)//此时还剩下三个console.log(queue.peek())//此时队列最前面的是猪八戒用队列解决实际问题击鼓传花围成一圈,开始大叔,数到一定数量的人自动淘汰,最后剩下的人获胜。这个人是谁//击鼓传花functionpassGame(nameList,num){//创建队列constqueue=newQueue()for(leti=0;i
