用一个数组实现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