#include#include #include #define MaxSize 5 typedef struct { int data[MaxSize]; int front,rear; }SqQueue; int InitQueue(SqQueue *Q){//此时front指向队列中对头元素 rear指向队列中队尾元素下一元素 Q->front=Q->rear=0; //需要牺牲掉一个节点的存储单元 所以最大容量为MaxSize-1 printf("该循环队列已完成初始化nn"); return 1; } int length(SqQueue Q){ return((Q.rear-Q.front+MaxSize)%MaxSize); } int isEmpty(SqQueue Q){ if(Q.front==Q.rear)return 1; else return 0; } int EnQueue(SqQueue *Q,int e){ if((Q->rear+1)%MaxSize==Q->front) return 0;//若当前循环队列为空 Q->data[Q->rear]=e; Q->rear=(Q->rear+1)%MaxSize; printf("本次元素:%d已入队nn",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; printf("本次出队元素为:%dnn",*e); return 1; } int GetHead(SqQueue Q){ if(Q.front==Q.rear){ printf("该循环队列当前为空nn"); return 0; } printf("该循环队列当前队头元素为%dnn",Q.data[Q.front]); return 1; } int main() { SqQueue Q; int discard; InitQueue(&Q); EnQueue(&Q,5); EnQueue(&Q,9); EnQueue(&Q,2); EnQueue(&Q,7); 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 0; }



