什么是棧
棧(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);