1、算法思想
- 在队列的基础上做调整
- front变量含义:front 指向队列的第一个元素(初为0),array【front】是队列的第一个元素
- rear变量含义:rear 指向队列的最后一个元素的后一个位置。(初为0)。空出空间做约定
- 队列满的条件是:(rear+1)%maxSize == front
- 队列空的条件是:real==front
- 队列中有效的数据的个数:(rear+maxSize - front )% maxSize
2、代码
package basicdata;
public class CirArrayQueueTest {
public static void main(String[] args) {
CyArrayQueue cyArrayQueue = new CyArrayQueue(16);
cyArrayQueue.enQueue(5);
cyArrayQueue.enQueue(1);
cyArrayQueue.enQueue(5);
cyArrayQueue.enQueue(6);
cyArrayQueue.enQueue(8);
System.out.println("打印整个队列");
int num3 = cyArrayQueue.deQueue();
System.out.println("出队数据:"+num3);
cyArrayQueue.showQueue();
}
}
class CyArrayQueue {
private int maxSize = 2;
private int front = 0;
private int rear = 0;
private int[] array;
public CyArrayQueue(int arrayMaxSize) {
maxSize = arrayMaxSize;
array = new int[maxSize];
}
public boolean isEmpty(){return front==rear ;}
public boolean isFull(){return (rear+1) % maxSize == front;}
public void enQueue(int value){
if (isFull()) {
System.out.println("队列已满,入队失败");
return;
}
else {
array[rear] = value;
rear = (rear+1)%maxSize;
}
}
public int deQueue() {
if (isEmpty()) {
throw new RuntimeException();
} else {
int temp = array[front];
front = (front + 1) % maxSize;
return temp;
}
}
public void showQueue(){
if (isEmpty()) {
System.out.println("队列为空,没有数据");
}
else {
for (int i = front; i <front+size() ; i++) {
System.out.printf("array[%d]=%d\t",i%maxSize,array[i%maxSize]);
}
}
}
public int size(){
return (rear-front+maxSize)%maxSize;
}
}
运行结果
```java
打印整个队列
出队数据:5
array[1]=1 array[2]=5 array[3]=6 array[4]=8
Process finished with exit code 0