1. 什么是栈?
- 栈(stack)又名堆栈,它是一种运算受限的线性表。
- 栈是一种遵从后进先出(LIFO)原则的有序集合。
- 新添加的或待删除的元素都保存在栈的末尾,称为栈顶,另一端叫栈底。
- 在栈里,新元素都靠近栈顶,旧元素都接近栈底。
2. 项目中用到的栈
情景一
一个音视频实时会议项目中, 涉及到心跳消息。当前处于语音通话,当收到一个指令消息时(比如: 打开摄像头), 执行并把它存入执行栈中, 但是由于当时的网络情况不好, 不支持传输视频流, 这个时候就需要把这个指令撤回, 存入回退栈中,再从执行栈中取出上一个指令再执行一遍。
情景二
会议中, 来了一个指令, 这是网络波动, 指令执行失败, 需要把指令存到回退栈中, 等网络恢复时, 从回退栈中取出, 再执行一遍。
实现一个栈--stack
function Stack(){
var items = []; // 用来保存栈里的元素
// 添加新元素到栈顶
this.push = function (element) {
items.push(element);
}
// 移除栈顶的元素,同时返回被移除的元素
this.pop = function () {
return items.pop();
}
// 返回栈顶的元素,不对栈做任何修改
this.peek = function () {
return items[items.length-1];
}
// 如果栈里没有任何元素就返回true,否则false
this.isEmpty = function () {
return items.length == 0;
}
// 返回栈里的元素个数,类似于数组的length属性
this.size = function () {
return items.length;
}
// 清空栈
this.clear = function () {
items = [];
}
// 打印栈
this.print = function () {
console.log(items.toString());
}
}