今天看图的广度优先遍历的时候发现用到了队列,补一下循环队列的知识参考《大话数据结构》的P116~117,自己写了一个简单的测试例子便于理解
首先需要理解以下三条公式。
front是队头元素的下标rear是队尾元素后一位的下标。(书上用头指针和尾指针front和rear并不是指针,个人觉得不太好)
注意:如果队列不保留任何元素空间
满足front==rear的情况下可能是队列空,也可能是队列满所以为了方便,本文讨论的是采用保留一个元素空间的方法(也可以采用设置标志变量的方法)
队列满只有这两种情况,所以队列满的条件是:
同时考虑这两种情况队列计算公式是:
MAXSIZE是队列长度(包括那個保留的元素空间)
下面举个简单的例子,实现循环队列的创建入队和出队操作。
代码和解释如下(VS2012测试通过):
设循环队列的容量为50(序号从0到49)现经过一系列的入队和出队运算后,有 front=16rear=5(rear指向队尾元素的后一位置),当前循环队列中元素个数为( )
求循环队列中的元素个数的公式为:(rear-front+size)%sizesize是循环队列的容量 所以,答案选B