我们将创建一个类来表示栈。首先声明这个类:
function Stack(){
}
接着我们需要一种数据结构来保存栈中的元素。可以选择数组:
var items = [];
接下来,为我们的栈声明一些方法。
push(element): 添加新元素到栈顶
pop(): 移除栈顶的元素, 同时返回被移除的元素。
peek(): 返回栈顶元素,不对栈元素做任何修改。
isEmpty(): 判断栈是否为空, 为空返回true, 否则返回false
clear(): 移除栈里的所有元素。
size(): 返回栈中的元素个数
print(): 遍历栈中的元素。
实现代码部分:
function Stack(){
var items = [];
this.push = function(element){ //添加新元素到栈顶
items.push(element)
}
this.pop = function(){ //移除栈顶的元素
return items.pop();
}
this.peek = function(){ //返回栈顶元素 不做任何操作
return items[items.length-1];
}
this.isEmpty = function(){ //判断栈是否为空
return items.length == 0;
}
this.size = function(){ //返回栈中元素的长度
return items.length;
}
this.clear = function(){ //清空栈元素
items = [];
}
this.print = function(){ //打印栈中的元素
return items.toString();
}
}
//利用栈实现进制转换函数
function baseConverter(decNumber, base){ //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;
}
var stack = new Stack();
stack.push(6);
stack.push(8);
stack.push(12);
console.log('栈的遍历' + stack.print());
console.log('出栈:' + stack.pop());
console.log('栈的遍历' + stack.print());
console.log('栈的长度为:' + stack.size());
console.log('是否为空栈:' + stack.isEmpty());
console.log('100345转化为二进制为:' + baseConverter(100345, 2));
console.log('100345转化为八进制为:' + baseConverter(100345, 8));
console.log('100345转化为十六进制为:'+ baseConverter(100345, 16));
运行结果如下: