- 栈是一种遵从 先进后出 原则的有序集合
- 栈顶:相当于数组的尾部
- 栈底:相当于数组的起始
- 入栈:相当于向数组末尾添加元素
- 出栈:相当于向数组末尾删除元素
- 栈的作用
- js 执行栈
- 变量的存储 - js中,变量存在栈结构中,复杂类型存在堆结构里面
数组模拟栈结构
/**
* 1.push 在栈顶添加元素
* 2.pop 删除栈顶元素并返回
* 3.peek 获取栈顶元素
* 4.isEmpty 判断栈是否为空
* 5.clear 清空栈结构
* 6.size 返回栈元素数量
*/
class Stack {
constructor() {
this.items = [];
}
push(element) {
this.items.push(element);
}
pop() {
return this.items.pop();
}
peek() {
return this.items[this.items.length - 1];
}
isEmpty() {
return this.items.length === 0;
}
clear() {
this.items = [];
}
size() {
return this.items.length;
}
}
对象模拟栈结构
/**
* 需要使用一个变量表示栈元素的索引
* 1.push 添加栈顶元素
* 2.pop 删除栈顶元素并返回
* 3.peek 返回栈顶元素
* 4.isEmpty 判断是否为空
* 5.size 判断栈元素数量
* 6.clear 清空栈
*/
class Stack {
constructor() {
// count可以表示栈元素的数量
this.count = 0;
this.items = {};
}
push(element) {
this.items[this.count] = element;
this.count++;
}
pop() {
this.count--;
let res = this.items[this.count];
delete this.items[this.count];
return res;
}
peek() {
return this.items[this.count - 1];
}
isEmpty() {
return this.count === 0;
}
size() {
return this.count;
}
clear() {
this.count = 0;
this.items = {};
}
}
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack);
stack.pop();
console.log(stack);
console.log(stack.isEmpty());
console.log(stack.size());
stack.clear();
console.log(stack);
栈解决进制转换问题
function hexOct(number) {
const stack = new Stack();
// 余数
let rem;
let comNumber = number;
// 输出结果
let res = '';
// 将每个输出的结果压入栈中,最小位在栈底,最大位在栈顶
while (comNumber > 0) {
rem = comNumber % 2;
stack.push(rem);
comNumber = Math.floor(comNumber / 2);
}
// 将每一位取出,从栈顶开始,依次拼接字符串
while (!stack.isEmpty()) {
res += stack.pop();
}
return res;
}