栈:
是一种遵循后进先出(Last In First Out / LIFO) 原则的一种有序集合。
新添加或者要删除的元素都会保存在栈的同一端,我们把它叫做栈顶,另外一端叫做栈底。
在栈中所有的新元素都接近栈顶,而所有的旧元素都接近栈底。
栈的操作:
栈的常见操作有:
push(elment):添加一个元素到栈顶位置
pop():删除一个栈顶元素
peek():查看栈顶元素
isEmpty():判断整个栈是否为空,返回一个布尔值
size():返回栈中元素的个数
toString():将栈中所有的元素转换为String类型
clear():清空整个栈
这些方法的代码实现:
push(element): 将元素压入栈,并且添加的元素只能放在栈顶(也就是数组的尾部)
push(element) {
this.item.push(element);
}
pop()从栈中去元素,移除的就只能是栈顶的元素
pop() {
return this.item.pop();
}
peek()查看一下栈顶的元素
peek() {
return this.item[this.item.length - 1];
}
isEmpty()判断栈是否为空
isEmpty() {
return this.item.length === 0;
}
size()获取栈中元素的个数
size() {
return this.item.length;
}
toString():将栈中所有的元素转化为字符串
toString() {
let resString = "";
for (let i = 0; i < this.item.length; i++) {
resString += this.item[i] + " ";
}
return resString;
}
clear()清空栈中的所有的元素
clear() {
return this.item = [];
}
完整代码:
//封装栈类
class Stack {
constructor() {
this.item = [];
}
//栈中的相关操作
//1.push()将元素压入栈,并且添加的元素只能放在栈顶(也就是数组的尾部)
push(element) {
this.item.push(element);
}
//2.pop()从栈中去元素,移除的就只能是栈顶的元素
pop() {
return this.item.pop();
}
//3.peek()查看一下栈顶的元素
peek() {
return this.item[this.item.length - 1];
}
//4.isEmpty()判断栈是否为空
isEmpty() {
return this.item.length === 0;
}
//5.size方法获取栈中元素的个数
size() {
return this.item.length;
}
//6.toString()toString方法
toString() {
let resString = "";
for (let i = 0; i < this.item.length; i++) {
resString += this.item[i] + " ";
}
return resString;
}
//7.clear()清空栈中的所有的元素
clear() {
return this.item = [];
}
}
创建一个栈验证一下所有的方法:
//创建一个栈,验证一下栈类的所有方法
const stack = new Stack();
//验证新创建的栈类是否为空
console.log(stack.isEmpty()); //true
//在新创建的栈类中添加两个元素
stack.push('ziop');
stack.push('lyyc');
//查看栈顶的元素
console.log(stack.peek());//lyyc
//查看栈的元素个数
console.log(stack.size());//2
//将栈顶的元素弹出
console.log(stack.pop());//lyyc
//将栈中的元素清空,栈中元素为0个
stack.clear();
console.log(stack.size());//0
//在栈中添加数字1 2
stack.push(1);
stack.push(2);
//调用栈的toString(),将栈中的元素都转为字符串类型
console.log(stack.toString()); // 1 2
console.log(typeof (stack.toString())); //string
我这里是采用类的形式进行封装,可以使用函数的方式进行封装,具体实现方式可以学习coderwhyB站的视频进行学习。