
大家好!这里是小野,一名二本学校努力的大二学生,正在努力学习数据结构,打算将其所有结构的源码写出与大家一起交流,期待与大家一起进步,互相成长!!! 循环队列
由一组地址连续的储存单元依次存放从队列头到队尾的元素,分别用front与rear指针指示队列头元素及队列尾元素的位置,并定义初始值为0,随后逐步增加并取余总空间的方式来确定位置。
完整代码如下:
#include#include #include #define OVERFLOW -2 #define OK 1 #define TRUE 1 #define ERROR 0 #define FALSE 0 typedef int Status; #define MAXQSIZE 5 typedef int QElemType; typedef struct { QElemType *base; int front; int rear; }SqQueue; Status InitQueue(SqQueue *Q) { Q->base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType)); if(!Q->base) exit(OVERFLOW); Q->front=Q->rear=0; return OK; } int QueueLength(SqQueue Q) { return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; } Status EnQueue(SqQueue *Q,QElemType e) { if((Q->rear+1)%MAXQSIZE==Q->front) return ERROR; Q->base[Q->rear]=e; Q->rear=(Q->rear+1)%MAXQSIZE; return OK; } Status DeQueue(SqQueue *Q,QElemType *e) { if(Q->front==Q->rear) return ERROR; *e=Q->base[Q->front]; Q->front=(Q->front+1)%MAXQSIZE; return OK; } Status QueuePrint(SqQueue Q) { int i; i=Q.front; while(i!=Q.rear) { printf("%d ",*(Q.base+i)); i=(i+1)%MAXQSIZE; } printf("n"); return OK; } int main() { Status j; int i=0,l; QElemType e; SqQueue Q; InitQueue(&Q); printf("请输入整型队列元素(不超过%d个),-1为提前结束符: ",MAXQSIZE-1); do { scanf("%d",&e); if(e==-1) break; i++; EnQueue(&Q,e); }while(i 运行结果:
对于我的理解,循环队列的存储方式与顺序表的存储方式相似,需要注意的是通过取余来对队头与队尾的位置不断更新定位,其余的 *** 作都比较简单。
大家如果浏览了我的博客发现我有错误的地方,麻烦谅解,并在评论中告诉我。谢谢!
加油加油加油!!!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)