JS版數據結構(第一章棧)

什麼是棧

棧作爲一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據。

棧有什麼作用

棧是非常底層的東西,在編程語言的編譯器和內存中保存變量、方法調用。

棧結構概念:入棧 、出棧、棧頂、棧底。

js實現棧結構依靠數組

方法名 操作
push 棧頂添加元素
pop 棧頂移除元素
peek 查看棧頂
isEmpty 檢查棧是否爲空
clear 移除全部元素
size 獲取棧的大小

下面代碼實現Stack類

class Stack {
  constructor() {
    // 私有屬性
    this._items = [];
  }
  // 棧頂添加元素
  push(el) {
    this._items.push(el);
  }
  // 棧頂移除元素
  pop(el) {
    return this._items.pop(el);
  }
  // 檢查棧頂
  peek() {
    return this._items[this._items.length - 1];
  }
  // 檢查棧是否爲空
  isEmpty() {
    return this._items.length === 0;
  }
  // 清除棧
  clear() {
    this._items = [];
  }
  // 查看棧的大小
  size() {
    return this._items.length;
  }
}

下面來個實例

// 十進制轉二進制
function conversionbinary(number) {
  let stack = new Stack();
  let remainder;
  let binary = '';
  // 進棧
  while (number > 0) {
    remainder = number % 2;
    stack.push(remainder);
    number = Math.floor(number / 2);
  }
  // 出棧
  while (!stack.isEmpty()) {
    binary += stack.pop();
  }
  return binary;
}

大家可能想實現一個十進制轉二進制還有其他方法,不必要這麼複雜。
不知道大家有沒有想過,即使使用其他方法實現十進制轉二進制,其思想也是棧的思想。

此章完結,下一章隊列

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章