JavaScript實(shí)現(xiàn)棧算法

什么是棧

棧(stack)是一種運(yùn)算受限的線性表:

LIFO(last in first out)表示就是后進(jìn)入的元素,第一個(gè)彈出??臻g。類似于自動(dòng)餐托盤,最后放上的托盤,往往先把拿出去使用。

其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對(duì)地,把另一端稱為棧底。

向一個(gè)棧插入新元素又稱作進(jìn)棧、入?;驂簵#前研略胤诺綏m斣氐纳厦?,使之成為新的棧頂元素;

從一個(gè)棧刪除元素又稱作出?;蛲藯?,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

JavaScript 代碼實(shí)現(xiàn)棧結(jié)構(gòu)

?// push() 添加一個(gè)新元素到棧頂位置。

? ? ? ? // pop() 移除棧頂?shù)脑?,同時(shí)返回被移除的元素。

? ? ? ? // peek() 返回棧頂?shù)脑兀粚?duì)棧做任何修改(該方法不會(huì)移除棧頂?shù)脑?,僅僅返回它)。

? ? ? ? // isEmpty() 如果棧里沒有任何元素就返回 true,否則返回 false。

? ? ? ? // size() 返回棧里的元素個(gè)數(shù)。這個(gè)方法和數(shù)組的 length 屬性類似。

? ? ? ? // toString() 將棧結(jié)構(gòu)的內(nèi)容以字符串的形式返回。


? ? ? ? // 初始化棧類

? ? ? ? class Stack {

? ? ? ? ? ? constructor(){

? ? ? ? ? ? ? ? this.items = []

? ? ? ? ? ? }

? ? ? ? ? ? // push() 添加一個(gè)新元素到棧頂位置。

? ? ? ? ? ? push(item){

? ? ? ? ? ? ? ? this.items.push(item)

? ? ? ? ? ? }

? ? ? ? ? ? // pop() 移除棧頂?shù)脑兀瑫r(shí)返回被移除的元素。

? ? ? ? ? ? pop(item){

? ? ? ? ? ? ? ? this.items.pop(item)

? ? ? ? ? ? }

? ? ? ? ? ? // peek() 返回棧頂?shù)脑?,不?duì)棧做任何修改(該方法不會(huì)移除棧頂?shù)脑兀瑑H僅返回它)。

? ? ? ? ? ? peek(){

? ? ? ? ? ? ? ? return this.items[this.items.length - 1 ]

? ? ? ? ? ? }

? ? ? ? ? ? // isEmpty() 如果棧里沒有任何元素就返回 true,否則返回 false。

? ? ? ? ? ? isEmpty(){

? ? ? ? ? ? ? ? return this.items.length === 0

? ? ? ? ? ? }

? ? ? ? ? ? // size() 返回棧里的元素個(gè)數(shù)。這個(gè)方法和數(shù)組的 length 屬性類似。

? ? ? ? ? ? size(){

? ? ? ? ? ? ? ? return this.items.length

? ? ? ? ? ? }

? ? ? ? ? ? // toString() 將棧結(jié)構(gòu)的內(nèi)容以字符串的形式返回。

? ? ? ? ? ? toString(){

? ? ? ? ? ? ? ? let itemStr = ''

? ? ? ? ? ? ? ? this.items.forEach(item => {

? ? ? ? ? ? ? ? ? ? itemStr += item + ''

? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? return itemStr

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? const stack = new Stack()

? ? ? ? stack.push(1);

? ? ? ? console.log("棧的初始化:", stack);

? ? ? ? console.log("================");

? ? ? ? stack.push(2);

? ? ? ? console.log("棧的初始化:", stack);

? ? ? ? console.log("================");

? ? ? ? stack.push(3)

? ? ? ? console.log("棧的初始化:", stack);

? ? ? ? console.log("================");

? ? ? ? let strStack = stack.toString()

? ? ? ? console.log(strStack);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容