栈是一种只能从表的一端存取数据且遵循 "先进后出" 原则的线性存储结构
- 其限制是仅允许在表的一端进行插入和删除运算。这一端称为栈顶,另一端称为栈底。
- LIFO(last in first out) 表示后进先出的元素,第一个弹出栈空间。
- 向一个栈插入新元素又称为进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
- 从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
js实现栈结构
// js 实现 栈结构
function Stack() {
// 栈中属性
this.items = []
// 压栈
Stack.prototype.push = function(element) {
this.items.push(element)
}
// 出栈
Stack.prototype.pop = function() {
return this.items.pop()
}
// 查看栈顶元素
Stack.prototype.peek = function() {
return this.items[this.items.length - 1]
}
// 查看栈是否是空的
Stack.prototype.isEmpty = function() {
return this.items.length === 0
}
// 获取栈的元素个数
Stack.prototype.size = function() {
return this.items.length
}
// 把栈结构内容以字符串形式返回
Stack.prototype.toString = function() {
var str = ''
for (var i = 0; i < this.items.length; i++) {
str += this.items[i] + ' '
}
return str
}
}
// 测试栈
var s = new Stack()
s.push(10)
s.push(20)
s.push(30)
console.log(s.toString()); // 10 20 30
s.pop()
console.log(s.toString()); // 10 20
console.log(s.peek()); //20
console.log(s.isEmpty()); // false
console.log(s.size()); //2
栈的应用 (10进制转2进制)
原理:
假如我们要计算100转换为二进制是多少
被除数 | 除数 | 余数 |
---|---|---|
100 | 2 | 0 |
50 | 2 | 0 |
25 | 2 | 1 |
12 | 2 | 0 |
6 | 2 | 0 |
3 | 2 | 1 |
1 | 2 | 1 |
二进制就是余数 从小往上拼接即: 1100100
代码
// 十进制转二进制
function des2bin(decNumber) {
// 定义栈结构
var stack = new Stack();
// 循环操作
// 循环条件 被除数大于0
while (decNumber > 0) {
// 把余数 放入栈中
stack.push(decNumber % 2);
// 获取整除后的结果 , 作为下一次运算的被除数
decNumber = Math.floor(decNumber / 2);
}
// 从栈中取出0 和 1
var str = "";
while (!stack.isEmpty()) {
str += stack.pop();
}
return str;
}
console.log(des2bin(100)); // 1100100
网友评论