环形队列
是队列的一种改进,原来队列不能重复使用,出现溢出现象。
改进思路:
- front指向队列的第一个元素,初始值为0;
- rear指向队列最后一个元素的后一个位置(希望空出一个空间做约定),初始值为0;
- 当队列满时,条件是(rear+1)%maxsize==front;
- 当队列空时,条件是rear==front;
- 队列中有效数据为(rear+maxsize-front)%maxsize
改进的代码段:
注意:
?
?
?
// 向对列中添加数据
public void addQueue(int n) {
// 判断队列是否满
if(isFull()) {
System.out.println("队列满,不能添加数据");
return;
}
arr[rear]=n;
rear=(rear+1)%maxSize;
}
// 从队列中取出数据
public int getQueue() {
if(isEmpty()) {
throw new RuntimeException("队列空,不能取数据");
}
int value=arr[front];
front=(front+1)%maxSize;
return value;
}
// 显示队列中所有数据
public void showQueue() {
if(isEmpty()) {
System.out.println("队列空,没有数据");
return;
}
for(int i=front;i<front+(rear+maxSize-front)%maxSize;i++) {
System.out.printf("arr[%d]=%d\n",i%maxSize,arr[i]);
}
}
// 显示队列头数据
public int headQueue() {
if(isEmpty()) {
throw new RuntimeException("队列空,不能取数据");
}
return arr[front];
}
|