栈 和 堆的基本概念
// 栈和堆是两种数据结构,有不同的特性和应用场景。
// 栈是一种遵循后进先出 (LIFO) 的有序集合。新添加或待删除的元素都保存在栈的同一端,这端称为栈顶。
// 相反,另一端称为栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
// 比如,图书馆放书的方式或者橱柜里的碗的摆放方式都是典型的栈的实例。
// 栈在编程中也有广泛的应用,如在编程语言的编译器和内存中保存变量、方法调用等。
// 堆则是一种遵循先进先服务的数据结构,常见的实例是人们排队购物。
创建栈的传统方式
// 以下是用传统的JavaScript方式创建一个栈:
function Stack() {
let items = []; // 使用数组来存储栈内的元素
// 向栈添加元素的方法
this.push = function(element){
items.push(element);
};
// 从栈中取出元素的方法
this.pop = function(){
return items.pop();
};
}
let stack = new Stack();
stack.push(5); // 例如,这里向栈中添加了一个元素5
使用ES6语法创建栈
// 使用ES6的类语法,我们可以更简洁地创建同样的栈结构:
class Stack {
constructor() {
this.items = []; // 初始化空数组来存储栈内的元素
}
// 向栈添加元素的方法
push(element) {
this.items.push(element);
}
}
栈的实际应用
// 栈的应用非常广泛。在算法中,特别是处理回溯问题时,它被用来存储访问过的任务或路径、撤销的操作。
// 在某些编程语言如Java和C#中,栈被用来存储变量和方法调用。特别是在处理递归算法时,如果栈空间被耗尽,
// 可能会抛出一个栈溢出异常。