算法题——————————————用一个数组实现3个栈

本文介绍了一种使用单一数组实现三个独立栈的方法,详细解释了如何通过特定的索引计算方式,确保每个栈都能独立进行入栈和出栈操作,同时避免了数据之间的相互干扰。

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

用一个数组实现3个栈

实现3个栈,可以将数组分成

栈1:3n+0

栈2:   3n+1

栈3: 3n+2

代码:

package Test;

public class ThreeStack {
Object[] stack;
int s1,s2,s3;
//每个栈的长度
public ThreeStack(int index) {
	s1=0;s2=1;s3=2;
	stack=new Object [3*index];
	
}
//栈已出栈和入栈
public void Stack1push(Object obj) {
	if(s1>=stack.length) {
		throw new IllegalArgumentException("stack1已满");
	}
	stack[s1]=obj;
	s1=s1+3;
}
public Object Stack1pop() {
	if(s1<0) {
		throw new IllegalArgumentException("stack1为空");
	}
	s1=s1-3;
	Object  obj=stack[s1];
	stack[s1]=null;
	return obj;
}
//栈2出栈和入栈
public void Stack2push(Object obj) {
	if(s2>=stack.length) {
		throw new IllegalArgumentException("stack2已满");
	}
	stack[s2]=obj;
	s2=s2+3;
}
public Object Stack2pop() {
	if(s2<1) {
		throw new IllegalArgumentException("stack2为空");
	}
	s2=s2-3;
	Object  obj=stack[s2];
	stack[s2]=null;
	return obj;
}
//栈3出栈和入栈
public void Stack3push(Object obj) {
	if(s3>=stack.length) {
		throw new IllegalArgumentException("stack3已满");
	}
	stack[s3]=obj;
	s3=s3+3;
}
public Object Stack3pop() {
	if(s3<2) {
		throw new IllegalArgumentException("stack3为空");
	}
	s3=s3-3;
	Object  obj=stack[s3];
	stack[s3]=null;
	return obj;
}
}

测试代码:

package Test;

public class TestSTackLegal {
	public static void main(String[] args) {
		
	ThreeStack ts=new ThreeStack(10);
	ts.Stack1push("a1");
	ts.Stack1push("b1");
	System.out.println(ts.Stack1pop());
	ts.Stack1push("c1");
	ts.Stack2push("a2");
	ts.Stack2push("b2");
	System.out.println(ts.Stack2pop());
	ts.Stack2push("c2");
	ts.Stack3push("a3");
	ts.Stack3push("b3");
	System.out.println(ts.Stack3pop());
	ts.Stack3push("c3");
	
	System.out.println(ts.Stack1pop()+"++"+ts.Stack1pop());
	System.out.println(ts.Stack2pop()+"++"+ts.Stack2pop());
	System.out.println(ts.Stack3pop()+"++"+ts.Stack3pop());

	}
}

输入:

b1
b2
b3
c1++a1
c2++a2
c3++a3
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值