經過前面一節《JavaScript數據結構01 - 數組》咱們知道,能夠在數組的任意位置上刪除或添加元素。然而,有時候咱們還須要一種在添加或刪除元素時有更多控制的數據結構。git
有兩種數據結構相似於數組,但在添加和刪除元素時更爲可控。github
它們就是棧和隊列。編程
棧是一種遵循後進先出(LIFO)原則的有序集合。新添加的或待刪除的元素都保存在棧的末尾,稱做棧頂,另外一端就叫棧底。數組
在棧裏,新元素都靠近棧頂,舊元素都接近棧底。bash
棧也被用在編程語言的編譯器和內存中保存變量、方法調用等,好比函數的調用棧。微信
這裏我仍是用構造函數的形式來書寫,你們有興趣能夠用ES6的Class來重寫一遍。數據結構
// Stack類
function Stack () {
this.items = [];
this.push = push;
this.pop = pop;
this.peek = peek;
this.isEmpty = isEmpty;
this.clear = clear;
this.size = size;
this.print = print;
}
複製代碼
棧裏面有一些聲明的方法:編程語言
// 添加新元素到棧頂
function push (element) {
this.items.push(element);
}
// 移除棧頂元素,同時返回被移除的元素
function pop () {
return this.items.pop();
}
// 查看棧頂元素
function peek () {
return this.items[this.items.length - 1];
}
// 判斷是否爲空棧
function isEmpty () {
return this.items.length === 0;
}
// 清空棧
function clear () {
this.items = [];
}
// 查詢棧的長度
function size () {
return this.items.length;
}
// 打印棧裏的元素
function print () {
console.log(this.items.toString());
}
複製代碼
// 建立Stack實例
var stack = new Stack();
console.log(stack.isEmpty()); // true
stack.push(5); // undefined
stack.push(8); // undefined
console.log(stack.peek()); // 8
stack.push(11); // undefined
console.log(stack.size()); // 3
console.log(stack.isEmpty()); // false
stack.push(15); // undefined
stack.pop(); // 15
console.log(stack.size()); // 3
stack.print(); // 5,8,11
stack.clear(); // undefined
console.log(stack.size()); // 0
複製代碼
本文會同步到個人我的博客,完整代碼能夠到個人github倉庫查看,若是對你有幫助的話歡迎點一個Star~~函數