固定长度数组实现栈和队列
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]; } }