一、用数组结构实现大小固定的队列和栈
1、数组实现栈
package FaceQuestion;
/**
* 使用固定长度的数组实现一个栈结构
*/
public class ArrayStack {
Integer[] arr;
Integer index;
public ArrayStack(int arraySize){
if (arraySize<0){
throw new IllegalArgumentException("数组初始化错误");
}
arr=new Integer[arraySize];
index=0;
}
/**
* 返回栈顶元素但不弹出
* @return
*/
public Integer peek(){
if (index==0){
return null;
}
return arr[index-1];
}
/**
* 弹出栈顶元素
* @return
*/
public Integer pop(){
if (index==0){
throw new ArrayIndexOutOfBoundsException("栈越界!!!");
}
return arr[--index];
}
/**
* 压栈
* @param obj
*/
public void push(int obj){
if (index==arr.length){
throw new ArrayIndexOutOfBoundsException("栈越界!!!");
}
arr[index++]=obj;
}
}
2.数组实现队列
package FaceQuestion;
/**
* 定长数组实现栈
* 设置标志位,start和end
* 从end中插入,start处弹出
* 同时使用size判断数组越界问题,size记录的是数组中元素个数
* 每插入一个元素,size++,元素放在end处,并使用nextIndex判断end位置,如果到数组边界,那么就置为0
* 每弹出一个元素,size--,弹出start处元素,并使用nextIndex判断start位置,如果到数组边界,那么置为0;
*/
public class ArrayQueue {
private Integer[] arr;
private Integer size;
private Integer start;
private Integer end;
/**
* 初始化定长数组
* @param initSize
*/
public ArrayQueue(int initSize){
if (initSize<0){
throw new IllegalArgumentException("数组初始化失败");
}
arr=new Integer[initSize];
size=0;
start=0;
end=0;
}
public Integer peek(){
if (size==0){
return null;
}
return arr[start];
}
public void push(int obj){
if (size==arr.length){
throw new ArrayIndexOutOfBoundsException("越界");
}
size++;
arr[end]=obj;
end=nextIndex(arr.length,end);
}
public Integer poll(){
if (size==0){
throw new ArrayIndexOutOfBoundsException("越界");
}
size--;
int tmp=start;
start=nextIndex(arr.length,start);
return arr[tmp];
}
/**
* 获取start和end的移动的下一个位置,如果到了边界,那么就置为0
* @param length
* @param