栈的封装
栈的封装
/**
* 栈常见的操作:
* - push(element):添加一个新元素到栈顶位置;
* - pop():移除栈顶的元素,同时返回被移除的元素;
* - peek():返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它);
* - isEmpty():如果栈里没有任何元素就返回true,否则返回false;
* - size():返回栈里的元素个数。这个方法和数组的length属性类似;
* - toString():将栈结构的内容以字符串的形式返回。
*/
class Stack{
//栈的自带属性
constructor() {
this.items = []
}
// 栈的相关操作
/**
* 1 push():将元素压入栈中
* 方法一(不推荐)给对象添加方法,其他对象不能复用
* this.push=()=>{
* }
* 方法二
* 给stack类添加方法,能够多对象复用
* 推荐
* stack.prototype.push=function(e){
* this.items.push(e)
* }
*/
push(e) {
this.items.push(e)
}
// 2 pop():从栈中取出元素
pop(){
// 利用数组item的pop方法实现Stack类的pop方法
if (this.isEmpty()) {
throw new Error('空栈')
}
return this.items.pop()
}
// 3 peek():查看一下栈顶的元素
peek(){
if(this.isEmpty()) throw new Error('栈空了');
return this.items[this.items.length - 1]
}
// 4 isEmpty():判断栈是否为空
isEmpty(){
return this.items.length == 0
}
// 5 size():获取栈中元素的个数
size (){
return this.items.length
}
// 6 toString():以字符串的形式输出
toString() {
let resultString = ''
for (let i of this.items) {
resultString += i + ''
}
return resultString
}
}
module.exports = Stack;
测试
let Stack = require('./01栈的封装.js')
let stack1 = new Stack();
// push() 测试
stack1.push(1);
stack1.push(2);
stack1.push(3);
console.log(stack1.items); //--> [1, 2, 3]
// pop() 测试
console.log(stack1.pop()); //--> 3
// peek() 测试
console.log(stack1.peek()); //--> 2
// isEmpty() 测试
console.log(stack1.isEmpty()); //--> false
// size() 测试
console.log(stack1.size()); //--> 2
// toString() 测试
console.log(stack1.toString()); //--> 1 2
结果