JS中數(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法訪問。為了得到棧底的元 素,必須先拿掉上面的元素。
棧的實(shí)現(xiàn)
用數(shù)組 dataStore 保存棧內(nèi)元素,構(gòu)造函數(shù)將其初始化為一個(gè)空數(shù)組。變量 top 記錄 棧頂位置,被構(gòu)造函數(shù)初始化為 0,表示棧頂對應(yīng)數(shù)組的起始位置 0。如果有元素被壓入 棧,該變量的值將隨之變化。
function Stack() {
this.dataStore = [];
this.top = 0;
this.push = push;
this.pop = pop;
this.peek = peek;
}
push() 方法:當(dāng)向棧中壓入一個(gè)新元素時(shí),需要將其保存在數(shù)組中變量 top 所對應(yīng)的位置,然后將 top 值加 1,讓其指向數(shù)組中下一個(gè)空位置。
function push(element) {
this.dataStore[this.top++] = element;
}
pop() 方法:與 push() 方法相反——它返回棧頂元素,同時(shí)將變量 top 的值減 1
function pop() {
return this.dataStore[--this.top];
}
peek() 方法:返回?cái)?shù)組的第 top-1 個(gè)位置的元素,即棧頂元素。如果對一個(gè)空棧調(diào)用 peek() 方法,結(jié)果為 undefined。這是因?yàn)闂J强盏?,棧頂沒有任何 元素。
pop() 方法雖然可以訪問棧頂?shù)脑?,但是調(diào)用該方法后,棧頂元素也從棧中被永久性地刪除了。peek() 方法則只返回棧頂元素,而不刪除它。
function peek() {
return this.dataStore[this.top-1];
}
length() 方法:通過返回變量 top 值的方式返回棧 內(nèi)的元素個(gè)數(shù)
function length() {
return this.top;
}
clear()方法:將變量 top 的值設(shè)為 0,清空棧
function clear() {
this.top = 0;
}
使用棧解決問題舉例:判斷一個(gè)字符串是否是回文
- JS中的算法與數(shù)據(jù)結(jié)構(gòu)之棧(Stack)實(shí)例詳解
- JavaScript數(shù)據(jù)結(jié)構(gòu)之棧實(shí)例用法
- 利用JavaScript實(shí)現(xiàn)棧的數(shù)據(jù)結(jié)構(gòu)示例代碼
- JavaScript數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之?dāng)?shù)組、棧與隊(duì)列
- JavaScript數(shù)據(jù)結(jié)構(gòu)中棧的應(yīng)用之表達(dá)式求值問題詳解
- javascript數(shù)據(jù)結(jié)構(gòu)中棧的應(yīng)用之符號平衡問題
- JavaScript實(shí)現(xiàn)棧結(jié)構(gòu)Stack過程詳解
相關(guān)文章
探討JavaScript中的Rest參數(shù)和參數(shù)默認(rèn)值
這篇文章的主要介紹了JavaScript中的Rest參數(shù)和參數(shù)默認(rèn)值,內(nèi)容很充實(shí),需要了解的朋友可以參考下2015-07-07
JavaScript中的正則表達(dá)式簡明總結(jié)
這篇文章主要介紹了JavaScript中的正則表達(dá)式,簡明總結(jié)了正則中的語法含義和RegExp對象,需要的朋友可以參考下2014-04-04
10分鐘徹底搞懂Http的強(qiáng)制緩存和協(xié)商緩存(小結(jié))
這篇文章主要介紹了10分鐘徹底搞懂Http的強(qiáng)制緩存和協(xié)商緩存(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
Ajax responseText解析json數(shù)據(jù)案例詳解
這篇文章主要介紹了Ajax responseText解析json數(shù)據(jù)案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
分析Node.js connect ECONNREFUSED錯(cuò)誤
最近在準(zhǔn)備Angularjs +node.js demo的時(shí)候在我的mac開發(fā)中 遇見此錯(cuò)誤2013-04-04
Javascript入門學(xué)習(xí)第八篇 js dom節(jié)點(diǎn)屬性說明
上2篇文章我們講了 用dom方式 創(chuàng)建節(jié)點(diǎn),復(fù)制節(jié)點(diǎn),插入節(jié)點(diǎn), 刪除節(jié)點(diǎn),替換節(jié)點(diǎn),查找節(jié)點(diǎn),獲取屬性等。。。2008-07-07

