#include#include #include #define MaxSize 5 typedef struct { int data[MaxSize]; int front,rear,size; }SqQueue; int InitQueue(SqQueue *Q)//此种实现不需要牺牲一个存储位置 { //同时队空和队满时皆有:(Q.rear+1)%MaxSize==Q.front Q->rear=MaxSize-1; //方便起见判空和判满时是使用Q.size printf("该循环队列已完成初始化nn"); return 1; } int length(SqQueue Q){ return(Q.size); } int isEmpty(SqQueue Q){ if(Q.size==0&&(Q.rear+1)%MaxSize==Q.front) return 1; else return 0; } int EnQueue(SqQueue *Q,int e){ if(Q->size==MaxSize&&(Q->rear+1)%MaxSize==Q->front){ printf("该循环队列已满 本次入队操作非法nn"); return 0; } Q->rear=(Q->rear+1)%MaxSize; Q->data[Q->rear]=e; Q->size++; printf("本次入队元素:%dnn",e); return 1; } int DeQueue(SqQueue *Q,int *e){ if(isEmpty(*Q)){ printf("该循环队列为空 本次出队操作非法nn"); return 0; } *e=Q->data[Q->front]; Q->front=(Q->front+1)%MaxSize; Q->size--; printf("本次出队元素:%dnn",*e); return 0; } int GetHead(SqQueue Q){ if(isEmpty(Q)){ printf("该循环队列为空 本次查对头操作非法nn"); return 0; } printf("循环队列当前对头元素为:%dnn",Q.data[Q.front]); return Q.data[Q.front]; } int main(){ SqQueue Q; int discard; InitQueue(&Q); if(isEmpty(Q)) printf("当前该循环队列为空nn"); else printf("当前该循环队列的长度为%dnn",length(Q)); EnQueue(&Q,9); EnQueue(&Q,5); EnQueue(&Q,2); EnQueue(&Q,7); EnQueue(&Q,4); EnQueue(&Q,4); if(isEmpty(Q)) printf("当前该循环队列为空nn"); else printf("当前该循环队列的长度为%dnn",length(Q)); DeQueue(&Q,&discard); if(isEmpty(Q)) printf("当前该循环队列为空nn"); else printf("当前该循环队列的长度为%dnn",length(Q)); GetHead(Q); return 1; }



