您的位置:首页 > 其它

静态队列为什么必须是循环队列

2018-01-15 12:58 513 查看
首先静态队列是基于数组实现的,如果是普通数组,规定font指向第一个元素的位置,rear指向最后一个元素位置的下一个位置



假设现在进行入队操作,此时 rear(后面)指针往后移动一位;出队则是font向后移动一位,此时会出现一个问题,

就是已经删除的元素所使用的空间无法继续使用;



因为每次入队或者出队都是font或者rear向后移动一位,font指针无法往前移动,此时就会造成删除的空间无法使用!!

到此处应该就想到了另外一种解决方法,循环队列即可解决问题



需要明白以下几个问题
  1.静态队列为什么必须要是循环队列?
   
因为静态队列是基于数组实现的,如果不用循环队列,会导致删除的元素所使用的空间无法继续使用,造成空间的浪费 
  2.循环队列需要几个参数来确定?以及各个参数的含义

         需要2个参数,第一个参数是front(前面),第二个参数是rear(后面);
2个参数在不同的场合下有不同的含义
   1.队列初始化
     
front和rear的值都为0;
    2.队列非空
     
front代表队列的第一个元素,
rear代表队列的最后一个有效元素的下一个元素 
    3. 队列空
   
 front和rear的值相等,但是不一定是0;因为是循环队列; 
  3. 循环队列入队伪算法
 
两步完成:
 
1
.将值存入rear代表的位置
 
2.将
rear的值变成(rear+1)%数组的长度  (这样就可以循环) 
  4.循环队列出队伪算法
 
将front的值变成(front+1)%数组的长度 
  5.如何判断循环队列是否是空?
 
如果front和rear的值相等,队列为空 
  6.如何判断循环队列是否已满? 

 
预备知识
 
front的值可能比rear的值大,也可能小,也可能相等
两种方式
1.
多增加一个标识参数,用于表示元素的个数,这种不常用,因为要多维护一个参数 
2.
少放一个元素(假设有6个元素,放5个就规定满了)  
 
 条件
当(rear+1)%数组的长度=front时,队列就满了 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: