算法笔记-数组实现循环队列
队列介绍
队列是一个有序列表,可以用数组和链表来实现(这里采用数组实现的方式)
队列有一个原则。即:先存入队列的数据要先取出。后存入的要后取出。
思路分析
因为队列的输出、输入分别从前后端来处理,因此需要两个变量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 | public class Arryqueue { |
判断队列是否已满的条件是:rear % MAXSIZE == front && rear != front,所以is_Full方法实现如下
1 | public boolean is_full(){ |
判断队列是否为空的条件是:rear == front,isEmpty方法实现如下
1 | public boolean is_empty(){ |
添加数据时,先判断队列是否已满。若未满,则将数据存入arry[rear % max_size],将rear向后移动一位。代码实现如下
1 | public void add(int num){ |
获取数据时,先判断队列是否为空。若非空,则将front向后移动,将arr[(front - 1) % max_size]取出。代码实现如下
1 | public int get(){ |
遍历队列,先判断是否为空,空的话输出“队列是空的”如果非空,那么从front遍历到rear取数据时将front和rear对max_size取余就行。
1 | public void show(){ |
编写main函数与简单的数据测试效果:
1 | public class ArryQueneDemo { |
测试效果: