栈结构
使用 js 实现一个简单的栈结构
function Stack() {
let datasource = [];
// 进栈
this.push = function(el) {
datasource.push(el);
};
// 出栈
this.pop = function() {
return datasource.pop();
};
// 返回栈顶元素
this.peek = function() {
return datasource[datasource.length - 1];
};
// 是否为空栈
this.isEmpty = function() {
return datasource.length === 0;
};
// 获取栈结构的长度。
this.length = function() {
return datasource.length;
};
// 清除栈结构内的所有元素。
this.clear = function() {
return (datasource = []);
};
}
let stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
console.log("进栈1,2,3,栈顶元素是:", stack.peek());
stack.pop();
console.log("出栈1次,栈顶元素是:", stack.peek());
console.log("栈的长度:", stack.length());
stack.clear();
console.log("清空栈之后,栈的长度:", stack.length());
为什么有时候会报错:堆栈溢出
常见场景:递归
function fn() {
let a = 1;
fn();
}
fn(); // 报错!!!! Maximum call stack size exceeded
// 最大调用堆栈大小超过
当我没有设定出口时,并没有任何一个函数会出栈,在不断的循环调用后,你的堆栈肯定不会是无限的,那么就只好提醒你堆栈溢出,程序报错。