回顾数组
特点:数组是一种常见线性结构,用于储存数据,并且可以在数组任意位置插入和删除元素
认识栈结构(Stack)
特点:栈也是一种常见的线性结构,但是与数组不同的是:栈是一种受限的线性结构(即只能在栈顶进行操作栈结构),主要表现在后进先出(LIFO): last in first out
-
入栈与出栈示意图
栈结构的实现
- 1.通过数组实现
- 2.通过链表实现(后面会补充)
栈的常见操作
- push(element):添加元素到栈顶
- pop():移除栈顶元素并返回该元素
- peek():返回栈顶元素(不做移除操作)
- isEmpty():查看栈是否为空,返回布尔值
- size():返回栈的大小
- toString():将栈元素以字符串形式返回
- 下面通过数组对栈进行封装:
function Stack() {
//栈的属性
this.items = []
//压栈
Stack.prototype.push = function (ele) {
this.items.push(ele)
}
//出栈
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
}
//栈的toString方法
Stack.prototype.toString = function () {
var res = ''
for (var i in this.items) {
res += this.items[i] + ' '
}
return res
}
}
栈的应用:十进制转二进制
方法:是用十进制的数字连续除以2,所得的商继续除以2,依此类推,直到商为0时停止,然后把所有余数倒序输出就是二进制。
10 / 2 = 5 余 0
5 / 2 = 2 余 1
2 / 2 = 1 余 0
1 / 2 = 0 余 1
10 --> 1010
代码实现:
//十进制转二进制
function dec2bin(decNum){
var s = new Stack()
while (decNum > 0) {
//获取余数压入栈
s.push(decNum % 2)
//获取整数商,作为下次运行的参数
decNum = Math.floor(decNum / 2)
}
var binString = ''
while(!s.isEmpty()){
binString += s.pop()
}
return binString
}
//测试
alert(dec2bin(10))