JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧詳解
1.認(rèn)識(shí)棧
棧:(stack)又名堆棧,它是一種運(yùn)算受限的線性表。遵循后進(jìn)先出(LIFO)
棧頂:限定僅在表尾進(jìn)行插入和刪除操作的線性表,
棧底:限定僅在表頭進(jìn)行插入和刪除操作的線性表。
進(jìn)棧:向一個(gè)棧插入新元素又稱作進(jìn)棧、入?;驂簵#前研略胤诺綏m斣氐纳厦?,使之成為新的棧頂元素;
出棧:從一個(gè)棧刪除元素又稱作出?;蛲藯#前褩m斣貏h除掉,使其相鄰的元素成為新的棧頂元素

2.面向過程方法源碼編寫棧
2.1思考
面向過程是什么:
面向過程就是將解決問題的步驟分析出來,
然后用函數(shù)實(shí)現(xiàn),
只要一步一步的執(zhí)行調(diào)用他就可以了。
2.2需要實(shí)現(xiàn)的方法
- push(element)添加一個(gè)或多個(gè)元素到棧頂
- pop()刪除錢頂?shù)脑?,并返回移除的元?/li>
- peek()返回棧頂?shù)脑?/li>
- isEmpty()用于判斷棧是否為空,空則為空
- clear()用于清空棧的元素
- size()用于返回棧中元素的個(gè)數(shù)
在實(shí)現(xiàn)之前我們思考一下我們?cè)趺磳?shí)現(xiàn)
首先我們借用數(shù)組的方法來實(shí)現(xiàn),所以我們需要?jiǎng)?chuàng)建
一個(gè)空數(shù)組來模擬棧
2.3源碼實(shí)現(xiàn),并調(diào)用類
構(gòu)建一個(gè)類,用數(shù)組來模擬,
在類中書寫各種方法
部分調(diào)用數(shù)組的方法。
總的來說就是用類來包裝
數(shù)組的方法來實(shí)現(xiàn)棧的模擬
class Stack {
constructor() {
this.item = []
}
push(element) {
this.item.push(element)
}
pop() {
return this.item.pop()
}
peek() {
return this.item[this.item.length - 1]
}
isEmpty() {
return this.item.length === 0
}
clear() {
this.item = []
size() {
return this.item.length
}
}
//實(shí)例化Stack類
const stack = new Stack()
stack.push(4)
stack.push(6)
console.log( stack.pop())
console.log(stack.peek())
console.log(stack.isEmpty())
console.log(stack.size())運(yùn)行結(jié)果:

3.用面向?qū)ο蟮姆椒▉碓创a書寫
3.1思考
面向?qū)ο螅?/strong>
就是將構(gòu)建問題的事物,分解成若干個(gè)對(duì)象,
建立對(duì)象不是為了完成某個(gè)步驟,而是為了
描述某個(gè)事物在解決問題過程的行為
3.2需要實(shí)現(xiàn)的方法
- push(element)添加一個(gè)或多個(gè)元素到棧頂
- pop()刪除錢頂?shù)脑?,并返回移除的元?/li>
- peek()返回棧頂?shù)脑?/li>
- isEmpty()用于判斷棧是否為空,空則為空
- clear()用于清空棧的元素
- size()用于返回棧中元素的個(gè)數(shù)
- toString()用于將棧以字符串的形式打印
那么在實(shí)現(xiàn)這個(gè)類,我們用對(duì)象來模擬棧
3.3源碼及使用類
class Stack {
constructor() {
this.count=0
this.items = {}
}
push(element) {
this.items[this.count]=element
this.count++
}
pop() {
if(this.isEmpty()){
return undefined
}
this.count--
const result=this.items[this.count]
delete this.items[this.count]
return result
}
peek() {
if(this.isEmpty()){
return undefined
}
return this.items[this.count-1]
}
isEmpty() {
return this.count===0
}
clear() {
this.items={}
this.count=0
}
size() {
return this.count
}
toString(){
if(this.isEmpty()){
return undefined
}
let objectString=`${this.items[0]}`
for(let i=1;i<this.count;i++){
objectString=`${objectString},${this.items[i]}`
}
return objectString
}
}
const stack = new Stack()
stack.push(23)
stack.push(34)
stack.push(80)
console.log( stack.pop())
console.log(stack.peek())
console.log(stack.isEmpty())
console.log(stack.size())
console.log(stack.toString())在使用對(duì)象來模擬棧時(shí),采用了鍵:值的方式
來存儲(chǔ)數(shù)據(jù),比如this.items[this.count]=element
在這個(gè)結(jié)構(gòu)中用this.count來記錄棧的大小,
當(dāng)我們向里面插入一個(gè)數(shù)字時(shí),就分配count為鍵
插入的值為值。這個(gè)時(shí)候就需要將this.count++.
關(guān)于pop()與peek(),toString()方法都需要
先判斷棧是否為空,如果為空則返回undefined。
4.總結(jié)
- 了解了面向?qū)ο笈c面向過程
- 掌握了兩種方式用什么來模擬棧
- 對(duì)棧模擬進(jìn)行源碼設(shè)計(jì)
到此這篇關(guān)于JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧詳解的文章就介紹到這了,更多相關(guān)JS棧詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JavaScript樹形數(shù)據(jù)結(jié)構(gòu)處理
- JavaScript隊(duì)列數(shù)據(jù)結(jié)構(gòu)詳解
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法
- Javascript數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解
- ?JavaScript?數(shù)據(jù)結(jié)構(gòu)之散列表的創(chuàng)建(2)
- JavaScript?數(shù)據(jù)結(jié)構(gòu)之字典方法
- JavaScript?數(shù)據(jù)結(jié)構(gòu)之集合創(chuàng)建(2)
- JavaScript?數(shù)據(jù)結(jié)構(gòu)之集合創(chuàng)建(1)
- JavaScript數(shù)據(jù)結(jié)構(gòu)常見面試問題整理
相關(guān)文章
微信小程序?qū)崿F(xiàn)二維碼簽到考勤系統(tǒng)
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)二維碼簽到考勤系統(tǒng),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
水平不高,不能也不想從太深的層次去講解這個(gè)東西,只是根據(jù)一段比較有代表性的代碼,結(jié)合執(zhí)行結(jié)果,從表象上粗淺地談?wù)劇?/div> 2010-12-12
Jquery顏色選擇器ColorPicker實(shí)現(xiàn)代碼
這里我要分享一個(gè)自己修改的顏色選擇器,有需要的朋友參考下2012-11-11
JavaScript詳細(xì)分析數(shù)據(jù)類型和運(yùn)算符
這篇文章主要介紹了JavaScript數(shù)據(jù)類型和運(yùn)算符案例,結(jié)合實(shí)例形式分析了JavaScript數(shù)據(jù)類型和運(yùn)算符特性與相關(guān)操作技巧,需要的朋友可以參考下2022-07-07
tkinter使用js的canvas實(shí)現(xiàn)漸變色
這篇文章主要為大家介紹了tkinter使用canvas實(shí)現(xiàn)漸變色,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12
js實(shí)現(xiàn)使用鼠標(biāo)拖拽切換圖片的方法
這篇文章主要介紹了js實(shí)現(xiàn)使用鼠標(biāo)拖拽切換圖片的方法,涉及javascript操作圖片實(shí)現(xiàn)輪播效果的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05
JS+HTML實(shí)現(xiàn)的圓形可點(diǎn)擊區(qū)域示例【3種方法】
這篇文章主要介紹了JS+HTML實(shí)現(xiàn)的圓形可點(diǎn)擊區(qū)域,結(jié)合實(shí)例形式分析了javascript結(jié)合HTML元素屬性實(shí)現(xiàn)一個(gè)圓形的可點(diǎn)擊區(qū)域相關(guān)操作技巧,需要的朋友可以參考下2018-08-08最新評(píng)論

