栈-什么是栈???
概念:栈是一种受限制的线性表,是数据结构中一种抽象的数据存储结构,它遵循后进先出的原则
ps:内存中也有栈,栈内存是真实存在的一块内存区给数据结构中的栈不是一个概念,这里不要混搅了,由于栈遵循的是后进先出的原则,所以只能在栈顶添加在栈尾删除,下面让我们具体实现下栈结构
生活中有哪些栈呢,让我们思考下......
例子:比我我们整理好的一摞书籍,是不是需要从最下面开始放,而最上面的可以先取走阅读呢?又或者饭店洗好的一摞盘子,是不是也是从下面开始放,用的时候从最上面取呢?那么我们大概就有了栈这个结构了
class Stack {
constructor() {
// 声明一个数组用来存储栈数据结构
this.items = [];
}
// 进栈即添加后添加
push(ele) {
this.items.push(ele);
}
// 出栈即删除前删除
pop() {
return this.items.pop();
}
// 返回栈顶元素,其实就是我们数组的最后一位
peek() {
return this.items[this.items.length - 1];
}
// 判断栈中元素是否为空,其实就是数组长度
isEmpty() {
return this.items.length === 0;
}
// 获取栈中的元素的个数,同上
size() {
return this.items.length;
}
// 清空栈
clear() {
this.items = [];
}
}
示例:熟悉的禁止转换问题
可以利用栈将一个数字从一种数制转换成另一种数制。假设想将数字 n 转换为以 b 为基数 的数字,实现转换的算法如下。
- 最高位为 n % b,将此位压入栈。
- 使用 n/b 代替 n。
- 重复步骤 1 和 2,直到 n 等于 0,且没有余数。
- 持续将栈内元素弹出,直到栈为空,依次将这些元素排列,就得到转换后数字的字符 串形式
function mulBase(num, base) {
var s = new Stack();
do {
s.push(num % base);
num = Math.floor(num /= base);
} while (num > 0);
var converted = "";
while (s.length() > 0) {
converted += s.pop();
}
return converted;
}
可以试下二进制转为八进制额!