队列是一个有序的列表,可以用数组或链表实现。
特点:先入先出,在队尾添加数据,在队头取出数据。
二、数组实现队列package 数据结构;
public class ArrayQueue {
public static void main(String[] args) {
ArrQueue queue=new ArrQueue(3);
for(int i=0;i<3;i++) {
queue.addQueue(i+1);
}
queue.showQueue();
queue.getClass();
queue.headQueue();
}
}
class ArrQueue{
private int maxSize;//表示最大容量
private int front;//队列头
private int rear;//队列尾
private int[] arr;//用于模拟队列的数组
//创建队列的构造器,名称和类名一致
public ArrQueue(int ArrMaxSize) {
maxSize=ArrMaxSize;
arr=new int[maxSize];
front=-1;//指向队列头的前一个位置
rear=-1;//指向队列尾
}
public boolean isFull() {
return rear==maxSize-1;
}
public boolean isEmpty() {
return front==rear;//==-1
}
public void addQueue(int num) {
if(isFull()) {
System.out.println("fullqueue");
return;
}
rear++;
arr[rear]=num;
}
public int getQueue() {
if(isEmpty()) {
throw new RuntimeException("empty queue");
}
front++;
return arr[front];
}
public void showQueue() {
if(isEmpty()) {
System.out.println("empty queue");
return;
}
for(int i=0;i
注意:该数组只能使用一次,若要循环使用就要构造环形队列。
三、环形队列代码实现:
package 数据结构;
public class CircleArray {
public static void main(String[] args) {
CircleArr queue=new CircleArr(3);
for(int i=0;i<2;i++) {
queue.addQueue(i+1);
}
queue.showQueue();
queue.getQueue();
queue.headQueue();
}
}
class CircleArr{
private int maxSize;//表示最大容量
private int front;//队列头:指向队列的第一个元素,初始值为0
private int rear;//队列尾:指向队列最后一个元素的后一个位置,希望空出一个位置,初始值为0
private int[] arr;//用于模拟队列的数组
//创建队列的构造器,名称和类名一致
public CircleArr(int arrMaxSize) {
maxSize=arrMaxSize;
arr=new int[maxSize];
front=0;
rear=0;
}
public boolean isFull() {
return (rear+1)%maxSize==front;
}
public boolean isEmpty() {
return front==rear;
}
public void addQueue(int num) {
if(isFull()) {
System.out.println("fullqueue");
return;
}
arr[rear]=num;
rear=(rear+1)%maxSize;
}
public int getQueue() {
if(isEmpty()) {
throw new RuntimeException("empty queue");
}
int tmp=arr[front];//先保存至临时变量
front=(front+1)%maxSize;//因为front指向当前元素
return tmp;
}
public void showQueue() {
if(isEmpty()) {
System.out.println("empty queue");
return;
}
for(int i=front;i



