public class ArrayStack {
private Integer[] arr;
private Integer index;
public ArrayStack(int initSize) { //固定数组大小
if (initSize < 0) {
throw new IllegalArgumentException("this init size is less than 0");
}
arr = new Integer[initSize];
index = 0;
}
public Integer peek() {
if (index == 0) {
return null;
}
return arr[index - 1];
}
public void push(int obj) {
if (index == arr.length) {
throw new ArrayIndexOutOfBoundsException("The queue is full");
}
arr[index++] = obj;
}
public Integer pop() {
if (index == 0) {
throw new ArrayIndexOutOfBoundsException("The queue is empty");
}
return arr[--index];
}
}
循环利用数组
设置start和end开始指向0,设置一个size元素与约束end,加入元素,size++,当size=数组长度时,不允许在加入元素,当end,start走到数组最后一个下标时,返回0位置
public class ArrayQueue {
private Integer[] arr;
private Integer size;
private Integer start;
private Integer end;
public ArrayQueue(int initSize) { //固定数组大小
if (initSize < 0) {
throw new IllegalArgumentException("this init size is less than 0");
}
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("The queue is full");
}
size++;
arr[end] = obj;
end = end == arr.length - 1 ? 0 : end + 1; //看end是不是走到了最后面
}
public Integer pop() {
if (size == 0) {
throw new ArrayIndexOutOfBoundsException("The queue is empty");
}
size--;
int temp = start;
start = start == arr.length - 1 ? 0 : start + 1; //看start是不是走到了最后面
return arr[temp];
}
}