【前端數據結構基本】棧

媒介

棧是一種高效的數據構造,因為數據只能在棧頂增加或刪除,所以如許的操縱很快且很輕易完成。

一、什麼是棧

棧是一種特別的列表,棧內的元素只能經由過程列表的一端接見,這一端稱之為棧頂。
棧被稱為一種后入先出(LIFO,last-in-first-out)的數據構造。
因為棧具有后入先出的特性,所以任何不在棧頂的元素都無法接見,我們必須先拿掉上面的元素才接見其棧底的元素。
對棧的重要操縱是將一個元素壓入棧和將一個元素彈出棧,入棧運用push()要領,出棧運用pop()要領。

二、組織棧數據構造

我們將運用JavaScript完成棧構造,各部分功用運用解釋申明。
存儲數據我們運用的是數組。

/**
 * Stack 組織要領
 */
function Stack () {
  this.dataStore = []
  this.top = 0
  this.push = push
  this.pop = pop
  this.peek = peek
  this.clear = clear
  this.length = length
}

/**
 * push() 該要領用於向棧壓入元素
 * 向棧中壓入一個新元素,將其保留在數組中變量top所對應的位置
 * 然後將 top + 1 讓其指向數組中下一個空位置
 * @param {*} element
 */
function push (element) {
  this.dataStore[this.top++] = element
}

/**
 * pop() 該要領用於從棧頂推出元素
 * 返回棧頂元素,同時將變量top - 1
 */
function pop () {
  return this.dataStore[--this.top]
}

/**
 * peek() 該要領用於返回數組的第 top - 1 個位置的元素
 */
function peek () {
  return this.dataStore[this.top - 1]
}

/**
 * length() 該要領用於獵取棧的長度
 * 返回當前top值即可取得棧內元素個數
 */
function length () {
  return this.top
}

/**
 * clear() 該要領用於清空棧
 * 將top設為0
 */
function clear () {
  this.top = 0
}

三、棧的運用

數制間的互相轉換

我們能夠應用棧將一個数字從一種數制轉換為另一種數制。
假定想將数字n轉換為以b為基數的数字,完成的算法以下:

  1. 最高位為 n%b,將此位壓入棧。
  2. 運用 n/b 替代n。
  3. 反覆步驟1和2,直到n即是0,且沒有餘數。
  4. 延續將棧內元素彈出,直到棧空,順次將這些元素分列即可。

此算法只針對基數為2-9的狀況
代碼完成以下:

function mulBase (num, base) {
  let s = new Stack()
  do {
    s.push(num % base)
    num = Math.floor(num /= base)
  } while (num > 0) {
    let converted = ''
    while (s.length() > 0) {
      converted += s.pop()
    }
    return converted
  }
}

迴文

運用棧,我們能夠推斷一個字符串是不是為迴文。
字符串完全壓入棧內后,經由過程延續彈出棧中的每個字母就能夠獲得一個新的字符串,該字符串恰好與本來的字符串遞次相反。我們只需要比較兩個字符串即可。假如相稱,就是一個迴文。

function isPalindrome (word) {
  let s = new Stack()
  for (let i = 0; i < word.length; ++i) {
    s.push(word[i])
  }
  let rword = ''
  while (s.length() > 0) {
    rword += s.pop()
  }
  if (word == rword) {
    return true
  } else {
    return false  
  }
}

結束語

以上就是對JavaScript完成棧的引見。

參考資料:數據構造與算法JavaScript形貌 第4章 棧

    原文作者:Miyang
    原文地址: https://segmentfault.com/a/1190000015198963
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞