关于循环队列的一些讲解
来源:互联网 发布:福建广电网络集团张远 编辑:程序博客网 时间:2024/05/22 12:55
前面讲到了队列的“假溢出”,解决假溢出的办法就是后面满了,就再从头开始,也就是头尾相接的循环。我们把队列的这种头尾相接的顺序存储结构称为循环队列。
比如昨天的例子,rear可以改为指向下标为0的位置,这样就不会造成指针指向不明的问题了。
但是如果继续进行入队操作的话,比如继续插入a6、a7,则rear指针就与front指针重合,同时指向下标为2的位置。
我们来讨论第二种方法,由于rear可能比front大,也可能比front小,所以尽管它们只相差一个位置时就是满的情况,但也可能是相差整整一圈。所以若队列的最大尺寸为QueueSize,那么队列满的条件是(rear+1) %QueueSize == front (取模“%的目的就是为了整合rear与front大小为一个问题)。
比如上面这个例子, QueueSize = 5,当 front=0,而 rear=4, (4+1) %5 = 0,所以此时队列满。再比如,front = 2而rear =1。(1 + 1) %5 = 2,所以此时 队列也是满的。而对于下图, front = 2而rear= 0, (0+1) %5 = 1,1!=2,所以此时队列并没有满。
另外,当rear > front时,此时队列的长度为rear—front。但当rear < front时,队列长度分为两段,一段是QueueSize-front,另一段是0 + rear,加在一起,队列长度为rear-front + QueueSize,因此通用的计算队列长度公式为:
(rear—front + QueueSize) % QueueSize
有了这些讲解,现在实现循环队列的代码就不难了。具体的例子程序可以参照前面说的顺序队列。
- 关于循环队列的一些讲解
- 关于循环队列的一些讲解
- 关于循环队列取模的一些想法
- 关于循环队列的体会
- 关于firebug的一些讲解
- 关于as400的一些讲解
- 关于数据结构循环队列的取余%
- 关于循环队列的存储问题
- 关于Windows CE菜单的一些讲解
- 关于Smail代码的一些简单讲解
- 关于TextView的一些初步讲解
- 关于RecycleView的一些讲解和记录
- 关于platform_device一些讲解
- 关于ArrayBlockingQueue队列的一些问题
- 关于栈与队列的一些问题
- 关于数组实现队列的一些设计
- 关于表、栈、队列的一些认识
- 关于循环语句的一些问题
- OpenJudge7627 鸡蛋的硬度
- (OK) MPTCP - 100% OK - Android-x86-6.0-rc1 - (porting MPTCP to Android-x86) 成功 - Success
- 【自定义控件】Android 手把手教您自定义ViewGroup
- 项目开发流程(基本流程)
- idea16使用maven命令clean、编译、打包jar或者war
- 关于循环队列的一些讲解
- 求A和B两个数之和
- PHP MysqlI操作数据库
- MySQL 数据库性能优化之SQL优化
- 使用fragment注意事项
- C#与Arduino通过串口通信来控制LED灯的状态
- 韩信点兵
- 英尺到米的转换
- UVA 11520 Fill the Square .