文章目录
一、用数组实现大小固定的队列和栈
数组实现队列
1.题目
用数组实现大小固定的队列
2.算法思路
队列的特性是先进先出,后进后出。
- 可以设置队列的队头start和队尾end。然后队列的长度size。
- 队列的push方法,只需要将此时start索引处的值输出,然后,start需要向后移一个(如果原本在数组的最后一位,则移动到数组第一位)。同时size减1。
- 队列的poll方法,只需要将end向后移一个(如果原本在数组的最后一位,则移动到数组第一位),然后在新的end索引填上该数。同时size加1。
- 队列的peek方法,直接输出start索引处的元素即可。
3.算法代码
public static class arrayQueue{
private int[] arr;
private int start;
private int end;
private int size;
public arrayQueue(int arraySize){
arr = new int[arraySize];
start = 0;
end = 0;
size = 0;
}
//输出队列的队头元素
public int peek(){
if(size == 0){
//若队列是空的,抛异常
throw new ArrayIndexOutOfBoundsException("队列是空的");
}
return arr[start];
}
//向队列中添加元素
public void push(int num){
if(size == arr.length){
//若队列已满,抛异常
throw new ArrayIndexOutOfBoundsException("队列已经满了");
}
size++; //因为添加元素,故size加1
end = end==arr.length-1 ? 0 : end+1;//队尾指针如果本来指在数组最后一位,那么跳到0。否则加1
arr[end] = num; //在新的队尾加入该新元素
}
//队列输出队头元素并删除
public int pop(){
if(size == 0){
throw new ArrayIndexOutOfBoundsException("队列是空的");
}
size--; //因为删除元素,故size减1
int temp = arr[start]; //先记录住队头的元素
start = start==arr.length-1 ? 0:start+1;//队头指针若本来只在数组的最后以为,那么跳到0。否则加1
return temp;
}
}
数组实现栈
1.题目
用数组实现大小固定的队列。
2.算法思路
栈的特性是先进后出,后进先出。
- 设置栈的深度为size。栈所对应的数组示意图如下。0索引为栈底。
- 栈的push方法,只需要将size加1,然后在原size索引出添加该元素。
- 栈的pop方法,只需要将size减1。
- 栈的pop方法,直接输出size-1索引处的元素
3.算法代码
public