#include <stdlib.h>
#include <stdbool.h>
#include <stdio.h>
#define MAXSIZE 20
typedef struct {
int date;
} Item;
typedef struct {
Item item[MAXSIZE];
int front; //头指针
int rear; //尾指针
} queue;
//初始化
bool initQueue(queue *q);
//入队
void EnQueue(queue *q, Item *e);
//遍历
void QueueTraverse(queue *q);
//出队
void DeQueue(queue *q, Item *e);
//清空
bool clearQueue(queue *q);
//队列长度
int QueueLength(queue *q);
bool initQueue(queue *q){
q->front = 0;
q->rear = 0;
return true;
}
void EnQueue(queue *q, Item *e){
// 队列满的判断
if( (q->rear + 1)%MAXSIZE == q->front){
fprintf(stderr, "入队错误,队列已满.");
exit(EXIT_FAILURE);
}
//将元素e赋值给队尾
q->item[q->rear] = *e;
//rear指针向后移一位置,若到最后则转到数组头部
q->rear = (q->rear+1)%MAXSIZE;
}
void QueueTraverse(queue *q){
int i = q->front;
while( (i+q->front) != q->rear ){
printf("%d", q->item[i].date );
i = (i+1)%MAXSIZE;
}
}
void DeQueue(queue *q, Item *e){
//队列空的判断
if(q->front == q->rear){
fprintf(stderr ,"出队错误,队列为空");
exit(EXIT_FAILURE);
}
//将队头元素赋值给e
*e = q->item[q->front];
//front指针向后移一位置,若到最后则转到数组头部
q->front = (q->front+1)%MAXSIZE ;
}
bool clearQueue(queue *q){
q->front = q->rear = 0;
return true;
}
int QueueLength(queue *q){
return (q->rear-q->front+MAXSIZE)%MAXSIZE;
}
int main(void){
queue q;
Item e = {
e.date = 1
};
Item e1 = {
e1.date = 2
};
Item e2 = {
e2.date = 3
};
Item e3 = {
e3.date = 4
};
initQueue(&q);
EnQueue(&q,&e);
EnQueue(&q,&e1);
EnQueue(&q,&e2);
EnQueue(&q,&e3);
QueueTraverse(&q);
printf("\n");
Item e4;
DeQueue(&q, &e4);
printf("出队元素:%d\n",e4.date);
printf("队列的长度:%d",QueueLength(&q));
return 0;
}