栈的核心就是先进后出
用js写出数据结构中的自定义栈
使用原型来封装方法
class Stack{
constructor(){
this.items=[]// 栈中的属性
}
// 栈相关的方法
// 压栈操作
push(item){
this.items.push(item)
}
// 出栈操作
pop(){
this.items.pop()
}
peek(){ //查看栈顶元素
return this.items[this.items.length-1]
}
// 判断栈中的元素是否为空
isEmpty(){
return this.item=(this.items.length==0)
}
// 获取栈中元素的个数
size(){
return this.items.length
}
}
var stack=new Stack()
stack.push(66)
stack.push(77)
stack.push(88)
console.log(stack.items,11)
stack.pop()
console.log(stack.items,22)
console.log(stack.peek())
console.log(stack.isEmpty())
console.log(stack.size())
打印结果为:
利用栈的思想,使用js将十进制数转换成任意进制数(2,8,16进制)
以下代码引用了上边创建的class类函数Stack
function fn(chushu, base) { //设置形参
var stack = new Stack()
var arr = ["A", "B", "C", "D", "E", "F"] //十六进制
while (chushu > 0) { //除数必须大于0
var yushu = chushu % base
var chushu = Math.floor(chushu / base)
if (yushu > 9) {
yushu = arr[yushu - 10] //十六进制的余数
}
stack.push(yushu) //将余数依次压栈,放进数组中
}
var str = ""
while (!stack.isEmpty()) { //判断数组不为空时执行
str = str + stack.pop() //余数的数组依次出战,后进先出
}
return str
}
console.log(fn(100, 2))
console.log(fn(15, 8))
console.log(fn(20, 8))
console.log(fn(100, 16))
console.log(fn(200, 16))
结果为