循环队列的计算方法,求循环队列的长度
队列的定义如下
# define maxsize 10 typedef struct { elemtype data [ maxsize ]; int front,rear; } seq队列; 一个包含一个队列=元素的数组,一个开头指针,一个末尾指针
front :离开队伍
rear :即将入队
让我们先制定规则:
front是指团队页眉元素
rear指向队列末尾元素的以下元素: 当然,也可以直接指向队列末尾的元素。 但是,根据代码的不同,需要相应变更,但思想不会改变)。
开始时,让我们设定rear=front=data[0]
元素输出:前端
元素入队: rear
一直以来,rear都到达了索引的最大位置。 这个时候,队列满了,不能再入队了吗?
不,同时一直有要素离开队伍,仍然有空的位置可以继续进入队伍。 那个怎么表示呢?
于是循环队列出现了。 这个模拟时钟很好理解
时钟指针达到12时返回0,反复循环
出入队方针的变化可以表示为
元素输出: (前1 ) % maxSize
元素入队: (rear 1) % maxSize
此时的队列长度如何获取?
那不仅仅是真的前端。 请看图
队列长度公式:
(rearfrontmaxsIze ) maxsize (rear-front % maxsize (% maxsize ) rearfrontmaxsIze ) ) maxsize
最大化:的目的是防止rear - front 0
%maxSize:的目的是防止rear - front 0和maxSize使队列长度达到maxSize