// Method 方法,和某一个对象实例有联系的
// function 函数
// 封装栈类
function Stack() {
//栈中的属性
this.items = [];
//栈的相关操作
//1、添加一个新元素到栈顶位置 push方法
// this.push = function (this) {
// 给实例添加方法
// };
Stack.prototype.push = function (element) {
//给类添加方法 节省内存,效率更高
this.items.push(element);
};
//2、移除栈顶的元素,同时返回被移除的元素
Stack.prototype.pop = function () {
return this.items.pop();
};
//3、返回栈顶的元素,不对栈做任何修改
Stack.prototype.peek = function () {
return this.items[this.items.length - 1];
};
//4、如果栈里没有任何元素就返回true,否则返回false
Stack.prototype.isEmpty=function () {
return this.items.length==0
}
//5、返回栈里的元素个数,这个方法和数组的length属性很类似
Stack.prototype.size=function () {
return this.items.length
}
//6、将栈结构的内容以字符串形式返回
Stack.prototype.toString=function () {
var resultStr = ''
for(var i=0;i<this.items.length;i++){
resultStr+=this.items[i]+' '
}
return resultStr
}
}
var s = new Stack();
s.push(20)
s.push(10)
s.push(10)
s.push(30)
s.push(50)
s.push(120)
console.log("压入栈",s)
//压入栈 Stack { items: [ 20, 10, 10, 30, 50, 120 ] }
s.pop()
console.log("删除栈顶元素",s)
//删除栈顶元素 Stack { items: [ 20, 10, 10, 30, 50 ] }
console.log('栈顶元素', s.peek())
//栈顶元素 50
常见栈面试题:
有六个元素6,5,4,3,2,1的顺序进栈,问下列哪个不是合法的出栈序列?(C)
A:5,4,3,6,1,2
B: 4,5,3,2,1,6
C: 3,4,6,5,2,1
D: 2,3,4,1,5,6