一、创建Stack类
我们将创建一个Stack类来表示栈。先声明该类,并添加一系列属性和方法。
function Stack() {
this.items = []; //选择数组来保存栈中的元素
this.push = function(element) {
this.items.push(element); //添加一个新元素到栈顶
}
this.pop = function() {
return this.items.pop(); //移除栈顶的元素
}
this.peek = function() {
return this.items[this.items.length - 1]; //返回栈顶的元素
}
this.isEmpty = function() {
return this.items.length == 0; //栈为空则返回true
}
//还可以声明其他方法
//...
}
可以尝试使用ES6来改进。
let _items = Symbol(); //创建一个假的私有属性,ES6新增的Object.getOwnPropertySymbols方法能够访问到
class Stack {
constructor() {
this[_items] = [];
}
//stack方法
//...
}
二、十进制转换为二进制
function divideBy2(decNumber) {
var remStack = new Stack(),
rem,
binaryString = '';
while (decNumber > 0) {
rem = Math.floor(decNumber % 2);
remStack.push(rem); //余数进栈
decNumber = Math.floor(decNumber / 2);
}
while (!remStack.isEmpty()) {
binaryString += remStack.pop().toString(); //出栈
}
return binaryString;
}
三、十进制转换为任意进制
function baseConverter(decNumber, base) {
var remStack = new 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()]; //出栈并对数字进行转化
}
return baseString;
}
可以自行测试。