一. 用rear,front表示队尾和队首指针,实现循环队列入队,出队算法
/*入队列*/
status enterqueue(queue *Q,elemtype data){
if((Q->rear+1)%maxsize==Q->front){
printf("队列已满\n");
return ERROR;
}
Q->data[Q->rear]=data;/*把元素赋值给Q->data数组,同时队尾指针后移*/
Q->rear=(Q->rear+1)%maxsize;/*此处不写Q->rear++的原因是:如果队首指针不在队列开始处,容易造成队首还有若干个空间而却误认为队列已满
,形成"假溢出”*/
return OK;
}
/*出队算法*/
status exitqueue(queue *Q,elemtype data){
if(Q->front==Q->rear){
printf("空队列\n");
return ERROR;
}
data=Q->data[Q->front];/*出队列时从队首指针指向的元素开始*/
printf("%d ",data);
Q->front=(Q->front+1)%maxsize;/*队首指针后移,若队首指针在队尾指针之后(存在此种可能,切记!!),则在越过队列末端后
重新回到队列首端*/
}
二.假设以数组存放循环队列的元素,同时设变量rear和num分别作为队尾指针和队列中元素个数记录,试给出判别此循环队列队满的条件,并写出相应的出队入队算法。
#include<stdio.h>