队列先进先出所造成假溢出的缺陷怎么用循环队列实现?叙述原理并画图说明解决方案

谢谢各位大哥大姐,尽量说的详细点!

设置队列为循环队列就可以了。TOP=(TOP+1)MOD (MAX-1)。

下面是一个实例, 不过这个实现会浪费一个元素的存储空间。如果不想浪费队列的存储空间, 就需要设置一个监视变量。
public class Queue<T> {
private T[] queue;
private int front;
private int rear;

public Queue(T[] q){
this.queue = q;
this.front = 0;
this.rear = 0;
}

public boolean enqueue(T t){
if(!isFull()){
queue[rear] = t;
rear = (rear + 1) % queue.length;
return true;
}else{
throw new UnsupportedOperationException("Queue is full!");
}
}

public T dequeue(){
if(!isEmpty()){
T v = queue[front];
front = (front + 1) % queue.length;
return v;
}else{
throw new UnsupportedOperationException("Queue is empty!");
}
}

public boolean isEmpty(){
if(front == rear){
return true;
}else{
return false;
}
}

public boolean isFull(){
if(front == ((rear + 1) % queue.length)){
return true;
}else{
return false;
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

何谓队列的“假溢出”现象?如何用循环队列解决此问题,简述其工作...
解决方法:设置队列为循环队列就可以了。TOP=(TOP+1)MOD (MAX-1)。下面是一个实例, 不过这个实现会浪费一个元素的存储空间。如果不想浪费队列的存储空间, 就需要设置一个监视变量。public class Queue<T> { private T[] queue;private int front;private int rear;public Queue(T[] q){ t...

何谓队列的“假溢出”现象?如何解决?
解决队列上溢的方法有以下几种:(1)建立一个足够大的存储空间,但这样做往往造成空间使用效率低。(2)当出现假溢出时,可采用以下几种方法: ①采用平移元素的方法。每当队列中加入一个元素时,队列中已有的元素向队头移动一 个位置(当然要有空余的空间可移);②每当删除一个队头元素时,则...

什么是顺序队列的"假溢出"现象,如何解决此现象(要求简要叙述该解决方法...
顺序队列假溢出就是,随着队头出队慢慢地就会空出一个个存储单元,但是队尾一直再进,最后就是存储空间根本没用满,队列就满了!解决办法,2个,1个是空出1个存储单元出来,另一个是做成循环队列。当元素被插入到数组中下标最大的位置上之后,队列的空间就用尽了,尽管此时数组的低端还有空闲空间,这...

在顺序队列操作中,什么是“假溢出”现象?怎样解决这一现象?(数据结构...
解决:将存储队列的数组头尾相接,形成循环队列。队头、队尾指针加1时用语言的取模(余数)运算实现。队头指针进1: Q.front = (Q.front+1) % MAXQSIZE 队尾指针进1: Q.rear = (Q.rear+1) %MAXQSIZE

数据结构—队列(Queue)的原理以及Java实现案例
假溢出的办法就是后面满了,就再从头开始,也就是头尾相接的循环。我们把队列的这种头尾相接的顺序存储结构称为循环队列。 循环队列解决了假溢出的问题,同时入队和出队时间都是O(1)。此时需要考虑的就只是数组的容量有限的问题了。2.2 数组循环队列的简单实现\/***数组实现的循环队列,为了方便,这里底层数组设计为不...

...叫假溢出?为什么顺序队列通常都采用顺序循环队列结构?
假溢出是由于队尾rear的值和队头front的值不能由所定义数组下界值自动转为数组上界值而产生的,解决的办法是把顺序队列所使用的存储空间构造成一个逻辑上首尾相连的循环队列。和顺序表一样,顺序队列用一个向量空间来存放当前队列中的元素。由于队列的队头和队尾的位置是变化的,设置两个指针front和rear...

java如何实现循环队列?
此时front=rear=0,与初始为空矛盾.所以rear=(0-1)%n=n-1.2、循环队列为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。3、存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。

如何只用队头指针实现顺序循环队列?
防止假溢出的方法就是用“顺序循环队列”假设对头指针是front,队尾指针是rear 那么让队尾指针+1就自动指向对头——这就是循环 这是靠%运算实现的:(rear+1)%N==front , 其中N是存储空间的大小 那么在顺序循环队列中,如何判断“队列满”和“队列空”这两种状态呢?一般的做法是,少用一个存储...

什么是环形队列,采用什么方法实现环形队列
在用数组表示队列时把数组看成是一个环形的,即令数组中的第一个元素紧跟在最末一个单元之后就形成了一个环形队列。通常采用逻辑上求余数的方法来实现环形队列,假设数组的大小为n,当元素下标i增1时采用i=(i+1)%n来实现。

循环队列中rear、front 初始值是什么?
此时front=rear=0,与初始为空矛盾.所以rear=(0-1)%n=n-1.2、循环队列为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。3、存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。

相似回答