JS 棧

《學習JavaScript數據結構與算法》讀書筆記。javascript

棧(stack)又名堆棧,是一種遵循後進先出(LIFO)原則的有序集合。新添加或待刪除的元素都保存在棧的末尾,稱做棧頂,另外一端稱做棧底。在棧裏,新元素都靠近棧頂,舊元素都接近棧底。java

就比如:一個死衚衕,前面是「此路不通」,只有一個入口,若是一隊人進入,只能隊尾變對首出去。git

JS實現棧代碼(摘自《學習JavaScript數據結構與算法》):算法

function Stack() {

  /**
   * 用數組來模擬棧
   */
  var items = [];

  /**
   * 將元素送入棧,放置於數組的最後一位
   */
  this.push = function(element) {
    items.push(element);
  };

  /**
   * 彈出棧頂元素
   */
  this.pop = function() {
    return items.pop();
  };

  /**
   * 查看棧頂元素
   */
  this.peek = function() {
    return items[items.length - 1];
  }

  /**
   * 肯定棧是否爲空
   * @return {Boolean} 若棧爲空則返回true,不爲空則返回false
   */
  this.isAmpty = function() {
    return items.length === 0
  };

  /**
   * 清空棧中全部內容
   */
  this.clear = function() {
    items = [];
  };

  /**
   * 返回棧的長度
   * @return {Number} 棧的長度
   */
  this.size = function() {
    return items.length;
  };

  /**
   * 以字符串顯示棧中全部內容
   */
  this.print = function() {
    console.log(items.toString());
  };
}

咱們能夠利用棧來解決十進制的轉換問題,例如咱們將十進制數字轉爲二進制,是將十進制數字不斷地和2整除取餘,直到整除爲0。segmentfault

十進制轉任何進制代碼(摘自《學習JavaScript數據結構與算法》):設計模式

/**
   * decNumber 要轉換的十進制數字
   * base      目標進制基數
   */
  function baseConverter(decNumber, base) {
    var remStack = new Stack(),
        rem,
        baseString = '',
        digits = '0123456789ABCDEF';
    white (decNumber > 0) {
        rem = Math.floor(decNumber % base);
        remStack.push(rem);
        decNumber = Math.floor(decNumber / base);
    }
    
    white(!remStack.isEmpty()) {
        baseString += digits[remStack.pop()];
    }
    
    return baseString;
  }

JS 基本數組操做速查

方法 描述
concat() 鏈接兩個或更多的數組,並返回結果。
join() 把數組的全部元素放入一個字符串。元素經過指定的分隔符進行分隔。
pop() 刪除並返回數組的最後一個元素。
push() 向數組的末尾添加一個或更多元素,並返回新的長度。
reverse() 顛倒數組中元素的順序。
shift() 刪除並返回數組的第一個元素。
slice() 從某個已有的數組返回選定的元素。
sort() 對數組的元素進行排序。
splice() 刪除元素,並向數組添加新元素。可用於插入、替換
toSource() 返回該對象的源代碼。
toLocaleString() 把數組轉換爲本地字符串,並返回結果。
ushift() 向數組的開頭添加一個或更多元素,並返回新的長度。
valueOf() 返回數組對象的原始值。

附:
JavaScript數據結構和算法系列:
JS 隊列-優先隊列、循環隊列數組

JavaScript設計模式系列:
JavaScript設計模式之策略模式
JavaScript設計模式之發佈-訂閱模式(觀察者模式)-Part1數據結構

相關文章
相關標籤/搜索