JS-完成入栈出栈

JS-完成入栈出栈

1、什么是栈

栈是一种遵照 后进先出(LIFO) 准绳的有序鸠合。新增加的或许待删除的元素都保存在栈的尾部(即栈顶),另一端叫栈底。在栈里,新元素都靠近栈顶,旧元素都靠近栈底。

2、完成入栈出栈的要领

要领一是建立一个Stack类来示意栈。详细代码以下:

function Stack() {
  var items = [];

  // 增加一个(或几个)新元素到栈顶
  this.push = function(ele) {
    items.push(ele);
  };
    
  // 移除栈顶的元素,同时返回被移除的元素
  this.pop = function() {
    return items.pop();
  };

  // 返回栈顶的元素,不对栈做任何修正
  this.peek = function() {
    return items[items.length - 1];
  };

  // 推断栈里使是不是另有元素
  this.isEmpty = function() {
    return items.length == 0;
  };

  // 移除栈里一切的元素
  this.clear = function() {
    items = [];
  };

  // 返回栈里的元素个数
  this.size = function() {
    return items.length;
  };

  this.print = function() {
    console.log(items.toString());
  };
}
var stack = new Stack();
console.log(stack.isEmpty());
stack.push(1);
stack.push(8);
console.log(stack.peek());
stack.push(10);
console.log(stack.peek());
console.log(stack.size());
console.log(stack.isEmpty());
console.log(14)
stack.pop();
stack.pop();
stack.print();

另一种体式格局就是经由历程push将元素推入栈顶,然后遍历栈里的内容,删除栈顶元素,由于在栈顶元素被删除的时刻,数组的长度是一直在变化的,所以要先将数组的长度赋值给len,来确保每次删除的是栈顶元素

function stack2 () {
    var arr = []
    for(let i = 0; i < 5; i ++){
        var temp = i + 1;
        arr.push(temp)
        console.log(temp + '入栈')
        console.log(arr)
    }
    console.log("arr内容:" + arr)
    var len = arr.length
    for(let i = 0; i < len; i++) {
        console.log("当前栈的长度:" + arr.length)
        console.log("删除栈顶元素:" + arr.pop())
    }
}
stack2()

3、入栈出栈的现实运用

栈的现实运用之一就是完成十进制转化为恣意进制
以十进制转化为二进制为例:要把十进制转化成二进制,我们能够将十进制数字和2整除(二进制是蛮二进一),直到结果是0为止。其转化历程大抵以下:

// 将十进制转为恣意进制
function baseConerter(decNumber, 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()]
    }
    console.log('baseString:' + baseString)
    return baseString
}
baseConerter(223411, 2)    // 110110100010110011
baseConerter(223411, 8)    // 664263
baseConerter(223411, 16)  // 368B3
    原文作者:husky0601
    原文地址: https://segmentfault.com/a/1190000013319675
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞