棧數(shù)據(jù)結(jié)構(gòu)
棧是一種遵循后進先出(LIFO)原則的有序集合。新添加的或待刪除的元素都保存在棧的同一端截歉,稱為棧頂胖腾。另一端叫棧底。在棧里瘪松,新元素都靠近棧頂咸作,舊元素都接近棧底。
在現(xiàn)實生活中凉逛,也存在很多棧的例子性宏,比如我們擺放的一摞書,或者堆放的盤子状飞。
棧示例
棧也被用在編程語言的編譯器和內(nèi)存中保存變量毫胜、方法調(diào)用等。
創(chuàng)建棧
我們將創(chuàng)建一個類來表示棧诬辈。在這里我會使用ES6的class
特性酵使,如果你還不了解什么是ES6
的class
,請看這里焙糟。
class Stack {
constructor() {
this.items = [];
}
push() {} //添加元素入棧
pop() {} //移除棧頂元素口渔,返回被移除的元素
peek() {} //返回棧頂?shù)脑? isEmpty() {} //判斷棧是否為空,return Boolean
clear() {} //清空棧
print() {} //輸出棧元素
size() {} //返回棧的元素個數(shù)
}
向棧添加元素
我們首先實現(xiàn)push
方法穿撮,這個方法負(fù)責(zé)往棧中添加新元素缺脉,并且只添加到棧頂。
push(element) {
this.items.push(element);
}
從棧移除元素
因為棧遵循后進先出(LIFO)原則悦穿,所以我們使用數(shù)組的pop
方法攻礼。
pop(element){
this.items.pop(element)
}
查看棧頂元素
現(xiàn)在,為我們的類實現(xiàn)一些額外的輔助方法栗柒。如果想知道棧里最后添加的元素是什么礁扮,可以用peek方法。這個方法將返回棧頂?shù)脑?/p>
peek(){
return this.items[this.items.length-1];
}
檢查棧是否為空
下面實現(xiàn)isEmpty
方法,如果棧為空的話返回true
太伊,否則返回false
雇锡。
isEmpty() {
return this.items.length === 0
}
清空棧元素
我們來實現(xiàn)清空棧元素方法,采取最簡單的方法僚焦。
clear() {
this.items = []
}
輸出棧元素
現(xiàn)在我們實現(xiàn)這個輔助方法锰提,輸出棧元素。
print() {
console.log(this.items.toString())
}
返回棧內(nèi)元素個數(shù)
最后實現(xiàn)size
方法叠赐,這個方法返回棧內(nèi)的元素個數(shù)
size() {
return this.items.length
}