Java数据结构-003队列-数组模拟环形队列

1.数组模拟环形队列

       数组模拟环形队列是对数组模拟队列的一种改进,因为数组模拟队列只能使用一次,没有达到复用的效果,所以在原有的基础上对其进行改进.
       通过取模的方式来实现即可

要点:要做到循环,必须有一个空的位置,即数组为maxSize,队列有maxSize-1个位置
           rear指向队列的最后一个元素的后一个位置

2.思路分析:

思路:
1.maxSize 表明数组的最大容量

2.front=0 front 就指向队列的第一个元素, 也就是说 arr[front] 就是队列的第一个元素 ,

3.rear=0 rear 指向队列的最后一个元素的后一个位置. 因为希望空出一个空间做为约定

4.我们要先进性队列满的判断
该判断方法为:return (rear+1)%maxSize==front;

5.判断队列为空return rear==front;

6.添加数据到队列addQueue(int n)
先判断队列是否满
然后直接将数据加入arr[rear] = n;//这里把数组中的数添加后,我们要对rear进行后移
rear = (rear+1)%maxSize;

7.获取队列的数据getQueue()
先判断队列是否为空
//1.先把front对应的值保存到一个临时的变量
//2.将front后移,考虑取模
//3.将临时保存的变量返回
【我们不能直接return数组中的数,会结束方法,所以要先用一个临时变量保存该数子,当front后移之后,再输出数字】
int value = arr[front];
front = (front + 1)%maxSize;【这里就是front的后移】
return value;

8.最后进行遍历

// 遍历  
if (isEmpty()) {   
	System.out.println("队列为空,没有数据");   
	return;  
}  
//从front开始遍历,遍历多少个元素    
for (int i = front; i < front+size(); i++) {   
	System.out.printf("arr[%d]=%d\n", i%maxSize, arr[i]);  
	} 
}

Java数据结构-003队列-数组模拟环形队列_第1张图片


public class CricleArrayQueueDemo2 {
 public static void main(String[] args) {
  //创建一个环形队列
  CricleArrayQueue arrayQueue = new CricleArrayQueue(4);//有一个空的空间,这里设置的为4,其队列最多为3个
  char key = ' ';//接收用户输入
  Scanner scan = new Scanner(System.in);
  boolean loop = true;
  //输出一个菜单
  while(loop) {

你可能感兴趣的:(数据结构)