#include<stdio.h>
#include<stdlib.h>
struct queue{
int *data;
int front,rear;
int size;
int maxsize;
};
struct queue *create(int maxSize){
struct queue *q;
q=(struct queue *)malloc(sizeof(struct queue));
q->data=(int *)malloc(sizeof(int)*maxSize);
q->front=q->rear=0;
q->size=0;
q->maxsize=maxSize;
return q;
}
void inqueue(struct queue *q,int num){/*入队*/
if(q->size==q->maxsize){
printf("queue is full\n");
return;
}
q->data[q->rear++]=num;
if(q->rear==q->maxsize){
q->rear=0;
}
q->size++;
}
int dequeue(struct queue *q){/*出队*/
if(q->size==0){
printf("queue is empty\n");
exit(-1);
}
int temp = q->data[q->front++];
if(q->front==q->maxsize){
q->front=0;
}
q->size--;
return temp;
}
void PrintQueue(struct queue *q){/*打印队列中所有元素,从队头到队尾*/
int temp=q->front;
for(int i=0;i<q->size;i++){
printf("%d\t",q->data[temp++]);
temp=temp%q->maxsize;
}
}
int main(){
struct queue *q;
int n=10;
q=create(n);
for(int i=0;i<n;i++){
inqueue(q,i);
}
PrintQueue(q);
printf("\n");
for(int i=0;i<n;i++){
printf("%d\t",dequeue(q));
}
}