循环队列求队长的公式
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/09 10:38:52
缘分啊这么大的百度一眼就看见你了我是刚子--!慢慢找找到给你粘贴
选择A循环队列的原理你应该有点了解的,每次出队从队首取出一个元素,然后找到队列里下一个元素成为新的队首,故而需要front+1;因为是循环的,所以要能够从队尾回到队首,所以需要%m
如果是用数组实现的用队尾减队头再模数组长度如果是链表就要有个计数变量了
避免rear-front成为负值
设立一个标志位,比如说是flag最开始时队列为空,设flag=0当入队的时候让flag=1出队的时候flag=0然后再加上判断队头队尾指针是否重合重合,且flag=0,则为空重合且flag=1,则为满
∵front=8rear=7rea
#include#include#ifndefDataType#defineDataTypeint#endif#ifndefMaxSize#defineMaxSize5#endiftypedefstr
首先楼主的公式少加了一个括号,因为从优先级来说,求余是优先于加法的,所以正确的表达式应该是len=(rear-front+max)%max所以楼主的问题迎刃而解了,不是对maximum-front取余
内的随机整数,接着在队列未满时入队,紧跟着进行一次出队操作,主函数最后使队列中的所有元素依次出队.编程实现上述过程.
其实画个图就知道了,设f为队头,r为队尾,m为队长,a为元素个数,则1.f>r时,a=m+r-f;2.f
大小为6的数组:下标从0-5;从前面出队,从后面入队front(前面)=3rear(后面)=0当出队列中删除一个元素,也就是出队,即front+1:=4再插入两个元素,即rear+2=2【注】循环队列
先进先出删除一个元素,front向后一位,于是front==4加入两个元素,rear向后移动两位,于是rear==2
D栈;栈的特点是先进栈的后出栈,后进栈的先出栈,所以你对一个栈进行出栈操作,出来的元素肯定是你最后存入栈中的元素,所以栈有记忆功能.而队列是先进先出,你取队列的第一个元素,得到的是你最先存入队列的元素
includeusingnamespacestd;#defineMAX_QSIZE5typedefintElemType;typedefstructSqQueue//循环队列结构体定义{ElemTyp
判断队列满的条件:(rear+1)%m==(rear-quelen+m)%m入队算法voidEnQueue(ElemTypesequ[],ElemTypevalue){if((rear+1)%m==(
是的····顺序存储就是指用一组连续的存储单元依次存储,链式存储内存中地址不是挨着的,循环队列增设了两个指针头指针和尾指针,实现空间的最大利用
(q.rear-q.front+QUEUE_SIZE)%QUEUE_SIZE;//其中QUEUE_SIZE是循环队列容量
#defineMAXSIZE100typedefstruct{int*base;intfront;intrear;}SqQueue;intQueuelength(SqQueueQ)//返回Q的元素个数
有个设了队头,队尾的,你参考下,入队的时候队尾指针变,出队的时候队头指针变intEnQueue(CirQueue*Q,DataTypee)//入队{if(Q->quelen==QueueSize)/