「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」
前言
接上篇文章,认识了数据结构和算法的基本概念和栈的基础结构,接下来就对栈结构进行一定的练习,并用数组结构来实现一个栈。
栈结构面试题
- 有六个元素 6、5、4、3、2、1 的顺序进栈,问下列哪一个不是合法的出栈顺序:C
A、5 4 3 6 1 2
B、4 5 3 2 1 6
C、3 4 6 5 2 1
D、2 3 4 1 5 6
解释: A - 压入6,压入5,弹出5,压入4,弹出4,压入3,弹出3,弹出6,再压入2,1,先弹出1,再弹出2,正确
B - 压入6、5、4,弹出4,弹出5,压入3,弹出3、压入2,弹出2,压入1,弹出1,弹出6,正确
C - 压入6、5、4、3,弹出3,弹出4,然后要弹出就只能先弹出5,在弹出6,与3、4、6、5的顺序不符,因此 C 不合法
D - 压入6、5、4、3、2,弹出2,弹出3,弹出4,压入1,弹出1,弹出5,弹出6,正确
栈结构的实现
栈的常见操作:
-
push:添加一个新元素到栈顶
-
pop:移除栈顶的元素,同时返回这个元素
-
peek:返回栈顶的元素,但并不会弹栈
-
isEmpty:判断这个栈中是否为空
-
size:返回栈里的元素个数
-
toString:将栈结构的内容以字符串的形式返回
代码:
class Stack {
items = []
push(element){
this.items.push(element)
}
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(){
return this.items.join('')
}
}
测试代码:
const stack = new Stack()
stack.items = ['a', 'b', 'c', 'd']
console.log(stack.push(8))
console.log(stack.items) //['a', 'b', 'c', 'd', 8]
console.log(stack.peek()) // 8
console.log(stack.pop()) // 8
console.log(stack.items) //['a', 'b', 'c', 'd']
console.log(stack.isEmpty()) //false
console.log(stack.size()) // 4
console.log(stack.toString()) //'abcd'
栈 - 十进制转二进制
为什么要十进制转二进制?
-
现实生活中,主要使用十进制
-
但在计算科学中,二进制非常重要,因为计算机里所有内容都是用二进制数字表示的(0和1)
-
没有十进制和二进制相互转化的能力,与计算机交流就很困难
如何实现十进制转二进制
-
我们可以将十进制数字和2整除(二进制是满 2 进 1),直到结果是 0 为止,再把结果组合起来,再取反
-
例如:
10/2 ----- 0
5/2 ----- 1
2/2 ----- 0
1/2 ------ 1
结果就是:1010
实现一个 十进制转二进制函数
const Stack = require('./stack-demo')
function decTobin(decNumber) {
const stack = new Stack()
while (decNumber > 0) {
stack.push(decNumber % 2)
decNumber = Math.floor(decNumber / 2)
}
return stack.items.reverse().join('')
}