从现在开始,我们将停止直接与内存的交互,因为剩下的这些数据结构需要用其他数据结构来实现。
这些数据结构专注于做两件事:
根据数据的使用方式组织数据
抽象实现细节
栈和列表很像,因为它们是有序的,但栈限制只能在列表末尾插入或弹出值,正如之前看到的,当直接映射到内存时,这是非常快速的操作。
但是,栈也可以使用其他数据结构来实现,以便具有其他特性。
栈最常见的用法是一个进程向栈添加元素,另一个进程从栈取出并删除最近添加的元素。
实现栈数据结构可以提供以下一些运算:
一个生成空栈的构造函数;
将元素压入栈顶;
移除并返回栈顶元素;
返回栈顶元素;
下面我们将依次介绍其实现。
一个生成空栈的构造函数
这里也用到了 JavaScript 的数组,但它这里代表的是之前实现的列表而不是内存。
constructor() {
this.list = [];
this.length = 0;
}
我们将用 List 的 push 和 pop 中的两个函数来实现入栈和出栈操作,在这里可以直接用 Javascript 数组的 push 和 pop 函数来代替。
将元素压入栈顶
push 可以将项目添加到栈的顶部。
push(value) {
}
移除并返回栈顶元素
pop 可以从栈顶部删除项目。从列表末尾弹出最后一项并返回其值。
pop() {
}
返回栈顶元素
我们还添加了一个函数,以便在不将其从栈中移除的情况下查看栈顶部的元素。
peek() {
}
运行