循环队列--顺序存储
#include<stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 //最多容纳19个元素,front之前的一个空间空出来
typedef int Status;
typedef int QElemType;
typedef struct {
QElemType data[MAXSIZE];
int front;//指向下一次要出队的元素
int rear;//指向的位置是下一个入队元素的位置
}SqQueue;
Status visit(QElemType c){
printf("%d ",c);
return OK;
}
Status InitQueue(SqQueue *Q){
Q->front = 0;
Q->rear =0;
return OK;
}
Status ClearQueue(SqQueue *Q){
Q->front = Q->rear = 0;
return 0;
}
Status QueueEmpty(SqQueue Q){
if(Q.front == Q.rear){
return TRUE;
} else {
return FALSE;
}
}
int QueueLength(SqQueue Q){
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
Status GetHead(SqQueue Q,QElemType *e){
if(Q.front == Q.rear){
return ERROR;//空队列
}
*e = Q.data[Q.front];
return OK;
}
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) % MAXSIZE;
return OK;
}
Status DeQueue(SqQueue *Q,QElemType *e){
if(Q->rear == Q->front){
return ERROR;
}
*e = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return OK;
}
Status QueueTraverse(SqQueue Q){
int i;
i = Q.front;
while(i != Q.rear){
visit(Q.data[i]);
i = (i + 1) % MAXSIZE;
}
printf("\n");
return OK;
}
int main(){
Status j;
int i = 0,l;
QElemType e;
SqQueue Q;
InitQueue(&Q);
printf("初始化队列后,队列是否为空:%d\t队列长度:%d\n",QueueEmpty(Q),QueueLength(Q));
for( i = 1; i <= 21 ; i++){
EnQueue(&Q,i);
}
printf("队列是否为空:%d\t队列长度:%d\n",QueueEmpty(Q),QueueLength(Q));
QueueTraverse(Q);
DeQueue(&Q,&e);
printf("出队的元素是 %d\n",e);
printf("队列是否为空:%d\t队列长度:%d\n",QueueEmpty(Q),QueueLength(Q));
QueueTraverse(Q);
DeQueue(&Q,&e);
printf("出队的元素是 %d\n",e);
printf("队列是否为空:%d\t队列长度:%d\n",QueueEmpty(Q),QueueLength(Q));
QueueTraverse(Q);
DeQueue(&Q,&e);
printf("出队的元素是 %d\n",e);
EnQueue(&Q,1000);
printf("队列是否为空:%d\t队列长度:%d\n",QueueEmpty(Q),QueueLength(Q));
QueueTraverse(Q);
EnQueue(&Q,2000);
printf("队列是否为空:%d\t队列长度:%d\n",QueueEmpty(Q),QueueLength(Q));
QueueTraverse(Q);
EnQueue(&Q,3000);
printf("队列是否为空:%d\t队列长度:%d\n",QueueEmpty(Q),QueueLength(Q));
QueueTraverse(Q);
EnQueue(&Q,4000);
printf("队列是否为空:%d\t队列长度:%d\n",QueueEmpty(Q),QueueLength(Q));
QueueTraverse(Q);
GetHead(Q,&e);
printf("队首元素 %d\n",e);
ClearQueue(&Q);
printf("清空队列后,队列是否为空 %d\t 队列长度 %d\n",QueueEmpty(Q),QueueLength(Q));
printf("再次遍历队列");
QueueTraverse(Q);
}
如需转载,请注明文章出处,谢谢!!!
浙公网安备 33010602011771号