标签:return 队列 Maxsize 循环 关于 front rear
这篇博客主要总结一下循环队列的顺序存储方式
#define M 100 //最大队列长度 Typedef struct { QElemType *base; //初始化的动态分配存储空间 int front; //头指针 int rear; //尾指针 }SqQueue;
队列的基本操作:
InitQueue (&Q) //构造空队列 DestroyQueue (&Q) //销毁队列 ClearQueue (&S) //清空队列 QueueEmpty(S) //判空 QueueLength(Q) //取队列长度 GetHead (Q,&e) //取队头元素 EnQueue (&Q,e) //入队列 DeQueue (&Q,&e) //出队列 QueueTraverse(Q,visit()) //遍历
在此时继续入队会出现什么情况?
假溢出。什么是假溢出?当队尾指针达到数组上届,即使队列未满,也不能再做入队操作。
那么我们如何解决假溢出?将存储队列的数组头尾相接(注:不存在物理的循环结构),也就是我们所说的可以循环的队列。
此时,
rear=(rear+1)%Maxsize
如何判断循环队列队空?
front=rear
如何判断循环队列队满?修改队满条件(front=rear),浪费一个元素空间,当队列还有一个空闲空间是就认为队满。
front=(rear+1)%Maxsize
入队:
Status EnQueue(SqQueue &Q, QElemType e) { if((Q.rear+1)%Maxsize==Q.front) return ERROR; Q.data[Q.rear]=e; Q.rear=(Q.rear+1)%MAXQSIZE; return OK; }
出队:
Status DeQueue (LinkQueue &Q, QElemType &e) { if(Q.front==Q.rear) return ERROR; e=Q.data[Q.front]; Q.front=(Q.front+1)%Maxsize; return OK; }
求循环队列的长度:
int QueueLength (SqQueue Q) { return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; }
暂时先这样,有时间再更。
标签:return,队列,Maxsize,循环,关于,front,rear 来源: https://www.cnblogs.com/marswithme/p/16085222.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。