当前位置: 代码迷 >> 综合 >> javascript 栈(Stacks)算法与说明
  详细解决方案

javascript 栈(Stacks)算法与说明

热度:29   发布时间:2023-12-21 14:10:50.0

栈的介绍

栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都是靠近栈顶,旧元素都接近栈底。

其实就想书堆一样,新的书就放在上面。如果要拿下面的书,必须先把上面的书拿走才能,才能拿到想要的书。准照后进先出原则。


再讲解一下:

如图。有三个元素的栈,栈顶是100[2],栈底是81[0]。整个栈长度为3。



如图,删除栈的第一个元素把栈顶15给删除,栈的长度4也变成3个。再删除第一个元素,栈顶11给删除,剩下栈就是8,5。

栈的代码实现
ES6代码

class Stack {constructor () {this.items = [];}push(...element){
   //添加一个(或几个)新元素到栈顶。this.items.push(...element);}pop(){
   //移除栈顶的元素,同时返回呗移除的元素。return this.items.pop();}peek(){
   //返回栈顶的元素(不对栈做任何修改)。return this.items[this.items.length-1];}isEmpty(){
   //如果栈里没有任何元素就返回true,否则返回false。return this.items.length == 0;}size(){
   //返回栈里的元素个数。return this.items.length;}clear(){
   //移除栈里的所有元素。this.items = [];}print(){
   //打印栈里的元素。console.log(this.toString());}toString(){
   //把栈里的数据转成String返回。return this.items.toString();}
}let stack = new Stack()//实例化

栈的使用案例

用一个10进制转2进栈的举例子。进制转发也是先除判断是否有余,保存一个是否有余的标示,再往下再次除,重复这个过程,直到数除完为0,依次排列起来(0101)。栈输出为(1010)如下图。

进制转换方法

function baseConverter(decNumber, base){
    //修改base可以输出为其他进制。var remStack = new Stack(),rem,baseString = '',digits = '0123456789ABCDEF';while (decNumber > 0){rem = Math.floor(decNumber % base);remStack.push(rem);decNumber = Math.floor(decNumber / base);}while (!remStack.isEmpty()){baseString += digits[remStack.pop()];}return baseString;
}console.log(baseConverter(10, 2));//1010
console.log(baseConverter(100345, 8));//303771
console.log(baseConverter(100345, 16));//187F9
  相关解决方案