栈是一个很常用的结构数据,在 Java 等各种后台语言都有实现,但 JavaScript 却没有实现栈结构,本文就带你手动封装栈结构,希望对你有所启发:(胜利)
代码实现
// 栈结构的封装
class Stack {
constructor() {
this.items = [];
}
// push(item) 压栈操作,往栈里面添加元素
push(item) {
this.items.push(item);
}
// pop() 出栈操作,从栈中取出元素,并返回取出的那个元素
pop() {
return this.items.pop();
}
// peek() 查看栈顶元素
peek() {
return this.items[this.items.length - 1];
}
// isEmpty() 判断栈是否为空
isEmpty() {
return this.items.length === 0;
}
// size() 获取栈中元素个数
size() {
return this.items.length;
}
// toString() 返回以字符串形式的栈内元素数据
toString() {
let result = "";
for (let item of this.items) {
result += item + " ";
}
return result;
}
}
我们定义了 push
、pop
、peek
、isEmpty
、size
和 toString
几个方法,很简单,看看就行了。下面我们来测试验证我们的实现是否正确。
测试验证
let s = new Stack();
// 测试案例:
s.push(20);
s.push(10);
s.push(100);
s.push(77);
console.log(s.toString()); // 打印:20 10 100 77
// 删除两个元素
console.log(s.pop()); // 77
console.log(s.pop()); // 100
//取出栈顶元素
console.log(s.peek()); //1 0
// 是否为空
console.log(s.isEmpty()); //false
// 剩余大小
console.log(s.size()); //2
// 最终打印
console.log(s.toString()); //2
const decTobin = (decNumber) => {
//1.定义一个栈对象,保存余数
var stack = new Stack();
// 2.循环入栈操作
while (decNumber > 0) {
// 当除法结果不为零时,入栈添加
// 2.1.获取余数并放入栈中
stack.push(decNumber % 2);
// 2.2.获取整除后的结果作为下一次运算的数字(floor:向下取整)
decNumber = Math.floor(decNumber / 2);
}
// 3.循环出栈操作
let binaryString = "";
while (stack.items.length != 0) {
binaryString += stack.pop();
}
return binaryString;
};
// 测试代码
console.log(decTobin(10)); //1010
console.log(decTobin(100)); //1100100
console.log(decTobin(1000)); //1111101000
这个一看就懂吧。
参看实例
访问 Codepen 查看代码及最终效果。
评论 (0)