计算队列的元素个数:(尾-头+表长)%表长
队列头指针为front,队列尾指针为rear,队列容量为M,则元素个数为|rear-front+M|%M,注意,这个%是求余运算。
设f为队头,r为队尾,m为队长,a为元素个数,则1. f>r时,a=m+r-f; 2. f<=r时,a=r-f
拓展资料
为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列。这种循环队列可以以单链表的方式来在实际编程应用中来实现。
循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件front==rear来判别队列是"空"还是"满"。
一,队尾指针指向队尾元素的下一个位置
初始化:q.front=q.rear=0
入队:q.data【q.rear】=x;
q.rear=(q.rear+1)%maxsize;
出队:x=q.data【q.front】
q.front=(q.front+1)%maxsize
队列长度:(q.rear-q.front+maxsize)%maxsize
(1)牺牲一个存储单元条件下判断队列的空满
判断空:q.front=q.rear
判断满:(q.rear+1)%maxsize==q.front
(2)设置一个size判断空满
判空:size=0&&q.front=q.rear
判满:size=maxsize&&q.front=q.rear
(3)设置一个tag
判空:tag=0&&q.front=q.rear
判满:tag=0&&q.front=q.rear
二,队尾指针指向队尾元素
初始化:q.front=0 ,q.rear=n-1
入队:q.rear=(q.rear+1)%maxsize
q.data【q.rear】=x
出队:和队尾指针指向队尾下一个因素的代码一样
队列长度:(q.rear-q.front-1+maxsize)%maxsize
(1)牺牲一个存储单元判空满
判空:队头指针在队尾指针的下一个位置
判满:对头指针在队尾的下下一个位置
(2)设置一个size
判空:size=0&&队头指针在队尾指针的下一个位置
判满:size=maxsize&&队头指针在队尾的下下一个位置
(3)设置一个tag
判空:tag=0&&队头指针在队尾的下一个位置
判满:tag=1&&队头指针在队尾的下下一个位置