使用JS实现一个栈的基本功能

本文通过JS代码展示了如何创建一个基本的栈,并利用该栈实现数制转换功能。详细介绍了将十进制数转换为其他进制数的过程,通过除法和取余操作,将结果存入栈中,然后依次弹出得到目标进制的数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码:

(这里只是实现一个栈的基本功能,完整功能的JS栈在下面)

//用数组代替栈
//若栈内没有元素,往栈底添加一个
//取栈内元素时,从栈顶取,也就是存放这个栈数组的最后一个元素从后往前取元素
//取元素前判断栈内是否有元素
//显示栈内所有元素时,首先判断栈内是否有元素,若没有返回栈空,若有从后往前返回栈内元素
//本例没有规定栈的初始大小,你可以规定初始化栈的大小然后判断栈满,在栈满时无法继续添加元素
function createStack(){
	var stack = [];

	//入栈
	this.append = function (e){
		stack.push(e);
	}

	//出栈
	this.getStack = function(){
		if(stack.length == 0){
			return "栈空";
		}else{
			return stack.pop();
		}
	}

	//显示栈内所有元素
	this.show = function(){
		if(stack.length != 0){
			for(var i=stack.length-1;i>-1;i--){
				console.log(stack[i]);
			}
		}else{
			console.log("栈空")
		}
	}

	//清空栈内所有元素
	this.deleteAll = function(){
		stack = [];
	}
}

var stack =new createStack();
stack.append(1);
stack.append(3);
stack.append(9);
stack.append('A');
stack.show();
stack.deleteAll();
stack.show();
console.log(stack.getStack());

结果:

A
9
3
1
栈空
栈空

下面我们利用这个栈实现一下数制转换:

比如将十进制数N转换为j进制的数:
对N除j取余数,然后将结果依次存入栈中,最后再一次性将数据从栈中取出,结果就是这个N对应的j进制

function createStack(){
	var stack = [];

	//入栈
	this.append = function (e){
		stack.push(e);
	}

	//出栈
	this.getStack = function(){
		if(stack.length == 0){
			return "栈空";
		}else{
			return stack.pop();
		}
	}

	//显示栈内所有元素
	this.show = function(){
		if(stack.length != 0){
			for(var i=stack.length-1;i>-1;i--){
				console.log(stack[i]);
			}
		}else{
			console.log("栈空")
		}
	}

	//清空栈内所有元素
	this.deleteAll = function(){
		stack = [];
	}
}

var stack =new createStack();


//下面将十进制数138转换为二进制数()
var N=138;
var run=1;
while(run){
	stack.append(N%2);
	N=Math.floor(N/2);//向下取整
	if(N==0){
		run=0;
	}
}
stack.show();

结果:

1
0
0
0
1
0
1
0
//10001010为138的二进制

完整功能的JS栈:

function createStack(n){
	var stack = [];
	//创建一个长度为n的栈,len不可变
	var len = n;
	//栈中元素的数量
	var element = 0;

	//入栈,若栈满则提示
	this.append = function(o){
		if(element<len){
			//如果传入一个数组
			if(o instanceof Array){
				for(var i=0;i<o.length;i++){
					stack.push(o[i]);
					element+=1;
					//若数组内的元素数量大于可入栈的元素数量,返回栈满信息
					if(element==len){
						return "栈已满,无法继续添加!";
					}
				}
			}else{
				//传入一个普通变量
				stack.push(o);
				element+=1;
			}
		}
		else{
			return "栈已满,无法继续添加!";
		}
	}

	//出栈,出栈前判断是否栈空
	this.outStack = function(){
		if(element>0){
			var result = stack[element-1];
			//删除这个栈顶元素
			stack.pop();
			//减少一个栈内元素
			element-=1;
			return result;
		}
		else{
			return "栈空,请添加元素!"
		}
	}

	//显示所有栈内元素,显示前判断栈是否栈空
	this.showStack = function(){
		if(element>0){
			//后进先出
			for(var i=element-1;i>-1;i--){
				console.log(stack[i]);
			}
		}
		else{
			return "栈空,请先添加元素!"
		}
	}

	//初始化栈
	this.resetStack = function(){
		stack = [];
		element = 0;
	}
}
var stack1=new createStack(10);
stack1.append([1,2,3]);
stack1.showStack();
console.log("-----------------------------------------");
console.log(stack1.outStack());
console.log("-----------------------------------------");
stack1.showStack();
console.log("-----------------------------------------");
stack1.append(5);
stack1.showStack();
console.log("-----------------------------------------");
stack1.append([1,2,3,4,5,6,7,8,9]);
stack1.showStack();

输出:

3
2
1
-----------------------------------------
3
-----------------------------------------
2
1
-----------------------------------------
5
2
1
-----------------------------------------
7
6
5
4
3
2
1
5
2
1

附上一些数学方法:

// 1.只保留整数部分(丢弃小数部分)
parseInt(5.1234);// 5
// 2.向下取整(<= 该数值的最大整数)和parseInt()一样
Math.floor(5.1234);// 5    
// 3.向上取整(有小数,整数就+1)
Math.ceil(5.1234);

// 4.四舍五入(小数部分)
Math.round(5.1234);// 5
Math.round(5.6789);// 6
// 5.绝对值
Math.abs(-1);// 1
// 6.返回两者中的较大值
Math.max(1,2);// 2
// 7.返回两者中的较小值
Math.min(1,2);// 1
// 随机数(0-1)
Math.random();
// 随机数(1-3)
(Math.random()*2+1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值