JS-實現入棧出棧

JS-實現入棧出棧

一、什麼是棧

棧是一種遵循 後進先出(LIFO) 原則的有序集合。新添加的或者待刪除的元素都保存在棧的尾部(即棧頂),另外一端叫棧底。在棧裏,新元素都靠近棧頂,舊元素都接近棧底。git

二、實現入棧出棧的方法

方法一是建立一個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,來確保每次刪除的是棧頂元素this

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()

三、入棧出棧的實際應用

棧的實際應用之一就是實現十進制轉化爲任意進制
以十進制轉化爲二進制爲例:要把十進制轉化成二進制,咱們能夠將十進制數字和2整除(二進制是蠻二進一),直到結果是0爲止。其轉化過程大體以下:code

// 將十進制轉爲任意進制
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
相關文章
相關標籤/搜索