队列介绍

队列是一个有序列表,可以用数组和链表来实现(这里采用数组实现的方式)

​ 队列有一个原则。即:先存入队列的数据要先取出。后存入的要后取出。

思路分析

因为队列的输出、输入分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front会随着输出而改变,而rear则是随着数据输入而改变。而MaxSize则是数组队列的大小。

创建一个数组队列的类,其中需要包含以下几个方法:

  • oolean isFull():判断队列是否已满

  • boolean isEmpty():判断队列是否为空

  • void add(int date):添加数据

  • int get():取出数据

  • void show():遍历队列

代码实现

要用Java实现的话,首先定义一个数组队列的类ArryQueue,其中含有四个属性:

  • int front:指向队列第一个数据的位置

  • int rear:指向队列最后一个数据后一个的位置

  • int MAXSIZE:表示队列的大小

  • int arr[]:用于存储队列数据

以及一个带参构造方法

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Arryqueue {

private int front = 0;//指向队列第一个数据的位置
private int rear = 0;//指向队列最后一个数据后一位的位置
private final int max_size;//表示队列的大小
private int[] arry;//用于存储队列数据

public Arryqueue(int max){
arry=new int[max];
max_size=max;
}


判断队列是否已满的条件是:rear % MAXSIZE == front && rear != front,所以is_Full方法实现如下

1
2
3
4
5
6
public boolean is_full(){
if(rear%max_size==front&&front!=rear){
return(true);
}
return false;
}

判断队列是否为空的条件是:rear == front,isEmpty方法实现如下

1
2
3
4
5
6
public boolean is_empty(){
if(rear==front){
return(true);
}
return(false);
}

添加数据时,先判断队列是否已满。若未满,则将数据存入arry[rear % max_size],将rear向后移动一位。代码实现如下

1
2
3
4
5
6
7
public void add(int num){
if(is_full()){
throw new RuntimeException("队列已满");
}
arry[rear%max_size]=num;
rear++;
}

获取数据时,先判断队列是否为空。若非空,则将front向后移动,将arr[(front - 1) % max_size]取出。代码实现如下

1
2
3
4
5
6
7
8
9
public int get(){
if(is_empty()){
throw new RuntimeException("队列是空的");
}

front++;
return(arry[(front-1)%max_size]);

}

遍历队列,先判断是否为空,空的话输出“队列是空的”如果非空,那么从front遍历到rear取数据时将front和rear对max_size取余就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
public void  show(){

if(is_empty()){

System.out.println("队列是空的");
return;
}

for(int i=front;i<rear;i++){

System.out.println(arry[i%max_size]);
}
}

编写main函数与简单的数据测试效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class ArryQueneDemo {

public static void main(String[] args)throws Exception {

Arryqueue q =new Arryqueue(3);
q.show();
System.out.println("1,2,3入队");
q.add(1);
q.add(2);
q.add(3);
q.show();
System.out.println("出队1,2,入队4,5:");
q.get();
q.add(4);
q.get();
q.add(5);
q.get();
q.show();
}

}

测试效果:

效果图