使用数组实现简单队列(无环形结构 / JAVA代码)
队列:
- 队列是一个有序链表,可以用数组或是链表实现;
- 满足先入先出原则,即: 先存入到队列中的数据要先取出,后存入的数据要后取出;
;
数组实现简单无环队列
属性:
maxSize 记录最大容量;
front,rear 分别记录队列的头部和尾部的下标, front 会随着数据的出列操作而改变,而rear随着队列的入列而改变;
Java 代码实现:
public class QueueArr {
int maxSize;//容量
int rear;//队列尾
int front;//队列头
int[] queue;//数组容器
public QueueArr(int maxSize) {
this.maxSize = maxSize;
queue = new int[this.maxSize];
front = -1;//指向队列头部,下标位置为队列头部元素的前一个位置
rear = -1;//指向队列尾部,下标位置就是队列的最后一个元素
}
}
操作方法:
判断是否为空 isEmpty(): 当尾指针与头指针指向同一下标,此时队列为空。
public boolean isEmpty() {
return rear == front;
}
判断是否为满 isFull(): 当尾指针值为maxSize - 1,也就是容器的最大下标时,队列为满。
public boolean isFull() {
return rear == maxSize - 1;
}
入队操作 addQueue(): 如果队列满则不能添加新元素,若队列未满则尾部指针加一,添加新元素到尾指针位置。
public void addQueue(int elem) {
if(isFull()) {
//队列满 todo
}
else {
queue[++rear] = elem;
}
}
出队操作 poll(): 如果队列空则不能出队,若队列未空则头指针加一再将头指针所指元素返回代表该元素已出队列。
public int poll() {
if(isEmpty()) {
throw new RuntimeException("队列为空");
}else {
return queue[++front];
}
}
查看头部元素 peek(): 如果队列空则不能返回内容,非空时则返回front头部指针位置的下一个元素,代表当前队列的头部元素。
public int peek() {
if(!isEmpty()) {
return queue[front + 1];
}
else {
throw new RuntimeException("队列为空");
}
}
注意:
此队列实现方法仅为简单数组实现,并未考虑如何将数组容器内已出队列的元素位置重复利用,还可以使用环形数组来实现队列,最大化利用数组容器空间。