- 栈是一种遵从 先进后出 原则的有序集合
- 栈顶:相当于数组的尾部
- 栈底:相当于数组的起始
- 入栈:相当于向数组末尾添加元素
- 出栈:相当于向数组末尾删除元素
- 栈的作用
- 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;}