国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【前端數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)】棧

peixn / 2649人閱讀

摘要:前言棧是一種高效的數(shù)據(jù)結(jié)構(gòu),因?yàn)閿?shù)據(jù)只能在棧頂添加或刪除,所以這樣的操作很快且很容易實(shí)現(xiàn)。棧被稱為一種后入先出,的數(shù)據(jù)結(jié)構(gòu)。二構(gòu)造棧數(shù)據(jù)結(jié)構(gòu)我們將使用實(shí)現(xiàn)棧結(jié)構(gòu),各部分功能使用注釋說明。參考資料數(shù)據(jù)結(jié)構(gòu)與算法描述第章棧

前言

棧是一種高效的數(shù)據(jù)結(jié)構(gòu),因?yàn)閿?shù)據(jù)只能在棧頂添加或刪除,所以這樣的操作很快且很容易實(shí)現(xiàn)。

一、什么是棧

棧是一種特殊的列表,棧內(nèi)的元素只能通過列表的一端訪問,這一端稱之為棧頂。
棧被稱為一種后入先出(LIFO,last-in-first-out)的數(shù)據(jù)結(jié)構(gòu)。
由于棧具有后入先出的特點(diǎn),所以任何不在棧頂?shù)脑囟紵o法訪問,我們必須先拿掉上面的元素才能訪問其棧底的元素。
對(duì)棧的主要操作是將一個(gè)元素壓入棧和將一個(gè)元素彈出棧,入棧使用push()方法,出棧使用pop()方法。

二、構(gòu)造棧數(shù)據(jù)結(jié)構(gòu)

我們將使用JavaScript實(shí)現(xiàn)棧結(jié)構(gòu),各部分功能使用注釋說明。
存儲(chǔ)數(shù)據(jù)我們使用的是數(shù)組。

/**
 * Stack 構(gòu)造方法
 */
function Stack () {
  this.dataStore = []
  this.top = 0
  this.push = push
  this.pop = pop
  this.peek = peek
  this.clear = clear
  this.length = length
}

/**
 * push() 該方法用于向棧壓入元素
 * 向棧中壓入一個(gè)新元素,將其保存在數(shù)組中變量top所對(duì)應(yīng)的位置
 * 然后將 top + 1 讓其指向數(shù)組中下一個(gè)空位置
 * @param {*} element
 */
function push (element) {
  this.dataStore[this.top++] = element
}

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

/**
 * peek() 該方法用于返回?cái)?shù)組的第 top - 1 個(gè)位置的元素
 */
function peek () {
  return this.dataStore[this.top - 1]
}

/**
 * length() 該方法用于獲取棧的長度
 * 返回當(dāng)前top值即可獲得棧內(nèi)元素個(gè)數(shù)
 */
function length () {
  return this.top
}

/**
 * clear() 該方法用于清空棧
 * 將top設(shè)為0
 */
function clear () {
  this.top = 0
}
三、棧的應(yīng)用 數(shù)制間的相互轉(zhuǎn)換

我們可以利用棧將一個(gè)數(shù)字從一種數(shù)制轉(zhuǎn)換為另一種數(shù)制。
假設(shè)想將數(shù)字n轉(zhuǎn)換為以b為基數(shù)的數(shù)字,實(shí)現(xiàn)的算法如下:

最高位為 n%b,將此位壓入棧。

使用 n/b 代替n。

重復(fù)步驟1和2,直到n等于0,且沒有余數(shù)。

持續(xù)將棧內(nèi)元素彈出,直到棧空,依次將這些元素排列即可。

此算法只針對(duì)基數(shù)為2-9的情況
代碼實(shí)現(xiàn)如下:

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
  }
}
回文

使用棧,我們可以判斷一個(gè)字符串是否為回文。
字符串完整壓入棧內(nèi)后,通過持續(xù)彈出棧中的每一個(gè)字母就可以得到一個(gè)新的字符串,該字符串剛好與原來的字符串順序相反。我們只需要比較兩個(gè)字符串即可。如果相等,就是一個(gè)回文。

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  
  }
}
結(jié)束語

以上就是對(duì)JavaScript實(shí)現(xiàn)棧的介紹。

參考資料:數(shù)據(jù)結(jié)構(gòu)與算法JavaScript描述 第4章 棧

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108010.html

相關(guān)文章

  • 前端進(jìn)擊的巨人(二):、堆、隊(duì)列、內(nèi)存空間

    摘要:中有三種數(shù)據(jù)結(jié)構(gòu)棧堆隊(duì)列。前端進(jìn)擊的巨人一執(zhí)行上下文與執(zhí)行棧,變量對(duì)象中解釋執(zhí)行棧時(shí),舉了一個(gè)乒乓球盒子的例子,來演示棧的存取方式,這里再舉個(gè)栗子搭積木。對(duì)于基本類型,棧中存儲(chǔ)的就是它自身的值,所以新內(nèi)存空間存儲(chǔ)的也是一個(gè)值。 面試經(jīng)常遇到的深淺拷貝,事件輪詢,函數(shù)調(diào)用棧,閉包等容易出錯(cuò)的題目,究其原因,都是跟JavaScript基礎(chǔ)知識(shí)不牢固有關(guān),下層地基沒打好,上層就是豆腐渣工程,...

    edgardeng 評(píng)論0 收藏0
  • 學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(一):與隊(duì)列

    摘要:之?dāng)?shù)組操作接下來就是數(shù)據(jù)結(jié)構(gòu)的第一部分,棧。以字符串顯示棧中所有內(nèi)容方法的實(shí)現(xiàn)說明需要往棧中添加新元素,元素位置在隊(duì)列的末尾。的前端樂園原文鏈接寒假前端學(xué)習(xí)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法,棧與隊(duì)列 本系列的第一篇文章: 學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(一),棧與隊(duì)列第二篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(二):鏈表第三篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(三):集合第...

    Flink_China 評(píng)論0 收藏0
  • 前端基礎(chǔ)進(jìn)階(一):內(nèi)存空間詳細(xì)圖解

    摘要:一棧數(shù)據(jù)結(jié)構(gòu)與不同,中并沒有嚴(yán)格意義上區(qū)分棧內(nèi)存與堆內(nèi)存。引用數(shù)據(jù)類型的值是保存在堆內(nèi)存中的對(duì)象。不允許直接訪問堆內(nèi)存中的位置,因此我們不能直接操作對(duì)象的堆內(nèi)存空間。為了更好的搞懂變量對(duì)象與堆內(nèi)存,我們可以結(jié)合以下例子與圖解進(jìn)行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...

    _Suqin 評(píng)論0 收藏0
  • 【進(jìn)階1-3期】JavaScript深入之內(nèi)存空間詳細(xì)圖解

    摘要:進(jìn)階期理解中的執(zhí)行上下文和執(zhí)行棧進(jìn)階期深入之執(zhí)行上下文棧和變量對(duì)象但是今天補(bǔ)充一個(gè)知識(shí)點(diǎn)某些情況下,調(diào)用堆棧中函數(shù)調(diào)用的數(shù)量超出了調(diào)用堆棧的實(shí)際大小,瀏覽器會(huì)拋出一個(gè)錯(cuò)誤終止運(yùn)行。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進(jìn)階的第一期,本周的主題是調(diào)用堆棧,今天是第3天。 本計(jì)劃一共28期,每期重點(diǎn)攻...

    coordinate35 評(píng)論0 收藏0
  • Meteor——以NodeJS為基礎(chǔ)環(huán)境,MongoDB為數(shù)據(jù)環(huán)境的全開發(fā)平臺(tái)!

    摘要:當(dāng)一個(gè)應(yīng)用啟動(dòng)時(shí),會(huì)自動(dòng)加載這些庫,為應(yīng)用提供了一個(gè)基礎(chǔ)環(huán)境。也就是說,模板文件只能包含以這三種標(biāo)簽為頂層標(biāo)簽的片段。在中,我們需要判斷當(dāng)前的具體運(yùn)行環(huán)境,以便執(zhí)行相應(yīng)的代碼。 一、全棧開發(fā)平臺(tái) - 不僅僅是前端 Meteor和那些名聲如雷貫耳的前端框架,比如Angular, React等都不一樣,它是一個(gè) 采用單一開發(fā)語言的全棧開發(fā)的平臺(tái):開發(fā)者可以使用JavaScript同時(shí) 進(jìn)...

    chenatu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<