栈
栈(Stack)是一种遵循后进先出的原则(LIFO)的有序集合。新保存的或待删除的元素保存在栈的同一端,称作栈顶,另一端叫栈底。操作栈数据都是在栈顶操作。
在js中,可以用数组的
push()和pop()方法实现栈数据结构
实现栈数据结构
class Stack {
stack
constructor() {
this.stack = []
}
isEmpty() {
return this.stack.length === 0
}
size() {
return this.stack.length
}
push(value) {
this.stack.push(value)
}
pop() {
return this.stack.pop()
}
peek() {
if(this.isEmpty()) return
return this.stack[this.stack.length-1]
}
clear() {
this.stack = []
}
print() {
console.log(JSON.stringify(this.stack, null, 2))
}
}
简单应用
实现进制转换
十进制转二进制
中学数学学过,十进制转二进制,利用的是除余法。得到的余数,逆序串起来就是二进制的转换结果。
// 十进制转二进制
function divideBy2(decNumber) {
var remStack = new akutil.Stack(),
rem,
binarryString = ''
while (decNumber > 0) {
rem = Math.floor(decNumber % 2)
remStack.push(rem)
decNumber = Math.floor(decNumber / 2)
}
while (!remStack.isEmpty()) {
binarryString += remStack.pop().toString()
}
return binarryString
}
console.log('10 十进制转二进制',divideBy2(10));
console.log(divideBy2(3));
console.log(divideBy2(233));
实现任意进制转换
在十进制转二进制的基础上扩展,允许自定义除数。
// 转换任意进制
function baseConverter(decNumber, base) {
var remStack = new akutil.Stack(),
rem,
baseString = '',
digits = '0123456789ABCDEF'; // 十六进制转换映射
while(decNumber > 0) {
rem = Math.floor(decNumber % base)
remStack.push(rem)
decNumber = Math.floor(decNumber / base)
}
while(!remStack.isEmpty()) {
baseString += digits[remStack.pop().toString()]
}
return baseString
}
console.log(baseConverter(3, 10)); // 3
console.log(baseConverter(11, 16)); // B
JS栈与进制转换
本文介绍了如何使用JavaScript实现栈数据结构,并展示了栈在进制转换中的应用。通过具体实例,如十进制到二进制及任意进制的转换,深入浅出地解释了栈的操作原理。

被折叠的 条评论
为什么被折叠?



