什么是栈
栈(stack):是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据。
- 栈是一种运算受限制的线性表,其限制为只能在一端进行新增和删除数据,这一端成为栈顶,相对的把另一端称之为栈底。
- 向一个栈插入新元素又称作进栈、入栈。
- 从栈中删除一个元素称作出栈、退栈。
- 栈的特点为:先进后出,后进先出。
如下图:
栈常见的操作
- push() 在栈顶位置添加一个新的元素 --> 入栈
- pop() 在栈顶位置移除一个元素 --> 出栈
- peek() 返回栈顶位置的元素
- isEmpty() 判断栈是否为空
- size() 返回栈中数据的数量
- toString() 以字符串的形式返回栈中的数据
ES6 实现栈数据结构
这里采用数组来实现栈的操作,我们可以约定数组的头部为栈顶,尾部为栈底。
- 栈 的封装
/**
*
* 栈结构
* 特点:后进先出,在栈顶进行出栈入栈操作
*
* @class Stack
*/
class Stack {
constructor() {
this.stack = [];
}
}
- push() 方法的实现
// 1. 将数据压入栈中
push(item) {
this.stack.unshift(item);
}
- pop() 方法的实现
// 2. 将栈顶的数据取出
pop() {
return this.stack.shift();
}
- peek() 方法的实现
// 3. 查看栈顶数据
peek() {
return this.isEmpty ? "栈为空" : this.stack[0];
}
- isEmpty() 方法的实现
// 4. 判断栈是否为空
isEmpty() {
return this.stack.length === 0;
}
- size() 方法的实现
// 5. 获取栈的大小
size() {
return this.stack.length;
}
- toString() 方法的实现
// 6. toString
toString() {
return this.stack.join(" ");
}
栈的总体代码
/**
*
* 栈结构
* 特点:后进先出,在栈顶进行出栈入栈操作
*
* @class Stack
*/
class Stack {
constructor() {
this.stack = [];
}
// 栈的相关操作
// 1. 将数据压入栈中
push(item) {
this.stack.unshift(item);
}
// 2. 将栈顶的数据取出
pop() {
return this.stack.shift();
}
// 3. 查看栈顶数据
peek() {
return this.isEmpty ? "栈为空" : this.stack[0];
}
// 4. 判断栈是否为空
isEmpty() {
return this.stack.length === 0;
}
// 5. 获取栈的大小
size() {
return this.stack.length;
}
// 6. toString
toString() {
return this.stack.join(" ");
}
}