实现栈的基本操作和返回最小值
public static class ArrayStack{
private int index = 0;
private int[] arr;
private int[] help;
public ArrayStack(int size){
if(size<1){
return;
}
arr = new int[size];
help = new int[size];
}
public void add(int num){
if(index==arr.length){
throw new ArrayIndexOutOfBoundsException();
}
help[index] = index==0? num :Math.min(num, help[index-1]);
arr[index++] = num;
}
public int remove(){
if(index==0){
throw new ArrayIndexOutOfBoundsException();
}
return arr[--index];
}
public int get(int i){
if(i>=index){
throw new ArrayIndexOutOfBoundsException();
}
return arr[index-(index-i)];
}
public int peek(){
if(index==0){
throw new ArrayIndexOutOfBoundsException();
}
return arr[--index];
}
//返回最小值
public int getMin(){
if(index==0){
throw new ArrayIndexOutOfBoundsException("getMin");
}
return help[--index];
}
}
实现队列的基本操作
public static class ArrayQueue{
private int index = 0;
private int size = 0;
private int end = 0;
private int[] arr;
public ArrayQueue(int s){
if(s<1){
throw new ArrayIndexOutOfBoundsException();
}
arr = new int[s];
}
public int peek(){
if(size==0){
throw new ArrayIndexOutOfBoundsException();
}
return arr[index];
}
public void add(int num){
if(size==arr.length){
throw new ArrayIndexOutOfBoundsException();
}
size++;
arr[end] = num;
end = end==arr.length-1? 0:end+1;
}
public int remove(){
if(size==0){
throw new ArrayIndexOutOfBoundsException();
}
size--;
int t = index;
index = index==arr.length-1?0:index+1;
return arr[t];
}
}