/* 1.初始化 2.进队列 3.出队列 4.读取队列 5.判断队列是否为空 6.判断队列是否已满 7.求队列长度 */ #include<stdio.h> #define maxsize 5 typedef struct { int data[maxsize]; int front,rear; }CircQueue; //循环队列的初始化,令对头队尾指针归零 void InitQueue(CircQueue &L){ L.rear=L.front=0; } //进队列 void EnQueue(CircQueue &L,int x){ if((L.rear+1)%maxsize==L.front){ printf("循环队列已满!不能再输入数据! "); return; } L.data[L.rear]=x; L.rear=(L.rear+1)%maxsize; return; } //出队列 void DeQueue(CircQueue &L){ if(L.rear==L.front){ printf("循环队列为空!"); return; } printf("%d",L.data[L.front]); L.front=(L.front+1)%maxsize; return; } //读取对头元素 void GetFront(CircQueue &L){ int x; if(L.rear==L.front){ printf("循环队列为空,不存在对头元素!"); return; } x=L.data[L.front]; printf("对头元素为:%d ",x); return; } //半段队列是否为空 void QueueEmpty(CircQueue &L){ if(L.rear==L.front){ printf("循环队列为空!"); return; } } //半段队列是否已满 void QueueFull(CircQueue &L){ if((L.rear+1)%maxsize==L.front){ printf("循环队列已满!"); return; } } //求队列长度 int QueueSize(CircQueue &L){ int count; count=(L.rear-L.front+maxsize)%maxsize; //printf("循环队列的长度为:",count); return count; } //删除对头元素 void DeQueue1(CircQueue &L){ if(L.rear==L.front){ return; } L.front=(L.front+1)%maxsize; printf("删除对头元素后的对头元素为:%d ",L.data[L.front]); return; } //主函数 int main(){ int i,n,x,k; CircQueue L; InitQueue(L); printf("请约定一个结束进队的数:"); scanf("%d",&n); for(i=0;i<maxsize;i++){ printf("请输入数据:"); scanf("%d",&x); if(x==n){ break; } EnQueue(L,x); if(L.rear==maxsize-1){ break; } } GetFront(L); DeQueue1(L); k=QueueSize(L); printf("循环队列长度为:%d ",k); printf("出对! "); for(i=0;i<k;i++){ DeQueue(L); } return 0; }