栈
基本规则
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素
手动实现
// 手动实现栈结构,这里使用数组来实现功能
export default class Stack {
// 元素信息
items: any[] = [];
// 压栈方法
push(value: any) {
this.items.push(value);
}
// 出栈方法: 删除并返回顶部元素
pop() {
return this.items.pop();
}
// 查看栈顶元素,只是查看
peek() {
return this.items[this.items.length - 1];
}
// 判断栈结构是否为空
isEmpty() {
return this.items.length === 0;
}
// 获取栈元素的个数
size() {
return this.items.length;
}
// toString方法,复杂结构不推荐使用
toString() {
let stackString = '';
for (let i = 0; i < this.items.length; i++) {
try {
if (typeof this.items[i] === 'object') {
// 排除复杂结构对该方法的影响
throw new Error();
}
stackString += this.items[i] + ' ';
} catch (e) {
console.error('复杂结构不允许使用该方法');
}
}
return stackString;
}
}
常见题目
/**
* 十进制转化为二进制
* @param {number} 十进制数字
* @return {string} 二进制拼接的数组
*/
const dec2bin = (decNumber: number) => {
const stack = new Stack();
// 循环取余
while (decNumber > 0) {
// 将每次的结果的余数压入栈中
stack.push(decNumber % 2);
// decNumber向下取整
decNumber = Math.floor(decNumber / 2);
}
let binaryString = '';
while (!stack.isEmpty()) {
binaryString += stack.pop();
}
return binaryString;
}