public class TwoStack {
private Object[] stack;
//栈1在数组中的下标
private int size1;
//栈2在数组中的下标
private int size2;
//初始化数组的大小
public TwoStack(int length){
stack=new Object[length];
size1=0;
size2=length-1;
}
//栈1的元素的个数
public int size1(){
return size1;
}
//栈2的元素的个数
public int size2(){
return capacity()-1-size2;
}
//栈1是否为空
public boolean isEmpty1(){
return size1==0;
}
//栈2是否为空
public boolean isEmpty2(){
return size2==(capacity()-1);
}
//数组的大小
public int capacity(){
return stack.length;
}
//数组自动扩展大小
public void ensureCapacity(){
if((size1()+size2())>=capacity()){
Object[] newStack=new Object[capacity()*2];
int k=newStack.length-1;
for (int i = 0; i <size1(); i++) {
newStack[i]=stack[i];
}
for(int j=capacity()-1;j>=0;j--){
newStack[k]=stack[j];
k--;
}
size2=newStack.length-(capacity()-size2);
stack=newStack;
}
}
//栈1入栈
public void push1(Object obj){
ensureCapacity();
stack[size1]=obj;
size1++;
}
//栈2入栈
public void push2(Object obj){
ensureCapacity();
stack[size2]=obj;
size2--;
}
//栈1出栈
public Object pop1(){
if(isEmpty1()){
throw new ArrayIndexOutOfBoundsException("栈1不能为空");
}
Object obj=stack[--size1];
stack[size1]=null;
return obj;
}
//栈2出栈
public Object pop2(){
if(isEmpty2()){
throw new ArrayIndexOutOfBoundsException("栈2不能为空");
}
Object obj=stack[++size2];
stack[size2]=null;
return obj;
}
}
使用一个数组实现两个栈
最新推荐文章于 2022-03-18 16:56:52 发布