如何解决队列的“假性溢出”问题?

队列存储中的”溢出”现象是比较普遍的问题,今天老师刚好讲到了一些这方面的知识,现在做一下整理:

真溢出:Q.rear==Q.front;

假性溢出:当队列中的存储空间没满时,但是由于来的元素堵在队尾,此时如果还有元素要入队的话,就会报错,发生溢出;

为了解决这个问题,有如下方法:

  1. 按最大可能的进队操作次数设置顺序队列的最多元素个数,比如说如果要操作16次,则可以存储8个元素;但是这个方法很浪费空间,一般不用这个方法;

  2. 修改出队操作算法,使每次出队后都把队列中剩余的操作元素向队头移动一个位置;

  3. 修改入队算法,增加判断条件,当发生“假性溢出”时,把数据元素向队头移动;

  4. 采用循环队列;

 

 

循环队列中当rear==front时,有可能是队满,也有可能是队空,为了判断属于哪种,有如下方法;

  • 方法一:加设标志位

  •   判队满:
      tag =1 && Q.rear == Q.front;
  • 判队空:
  • tag =0 && Q.rear== Q.front;
  •  方法二:少用一个存储单元

  • 判队满:
    Q.front = (Q.rear+1)%MAXSIZE;
  • 判队空:
    Q.front == Q.rear;

 

 

 

 

你可能感兴趣的:(如何解决队列的“假性溢出”问题?)