JS数据结构和算法--栈
概念
栈是一种后进先出的数据结构
- 其限制是仅允许在一端进行插入和删除。这一端被称为栈顶,另一端称为栈底;
- LFO( last in first out)后进入的元素第一个弹出栈空间;
- 向—个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
- 从—个栈删除元素又称作岀栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素;
实现
基于数组实现栈:
-
push():添加一个新元素到栈顶 pop():移除栈顶元素,返回被移除元素 peek():返回栈顶的元素 isEmpty():判断是否为空 clear():清空栈 get size:返回元素个数
class Stack { constructor() { this.items = [] } // 添加一个新元素到栈顶 push(el) { this.items.push(el) } // 移除栈顶元素,返回被移除元素 pop() { return this.items.pop() } // 返回栈顶的元素 peek() { const length = this.items.length return length ? this.items[length - 1] : undefined } // 判断是否为空 isEmpty() { return this.items.length === 0 } // 清空 clear() { this.items = [] return true } // 返回元素个数 get size() { return this.items.length } // toString toString() { let str = for (let i = 0; i < this.items.length; i++) { const el = this.items[i]; str += el + } return str } }
实际应用
实现十进制转二进制? 思路:将十进制数字不断和2相除,保留余数,直到结果取整后为0。将得到的余数从后向前拼接组成二进制数据
// 十进制转二进制 function dec2bin(number) { // 实例化栈 const stack = new Stack() // 除2取整结果大于0时循环 while (number) { // 余数放到栈中 stack.push(number% 2) // 获取整除的结果 number= Math.floor(number/ 2) } // 从后向前拼接栈中数据 let binStr = while (!stack.isEmpty()) { binStr += stack.pop() } return binStr }