#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MaxSize 100
typedef int dataType;
//循环队列
typedef struct{
dataType data[MaxSize];
int front,rear;
}SeqQueue;
//初始化队列
SeqQueue* createQueue(){
SeqQueue *q=(SeqQueue *)malloc(sizeof(SeqQueue));
q->front=q->rear=0;
return q;
}
//判断队列是否为空
int empty(SeqQueue *q){
return q->front==q->rear;
}
//判断队列是否满
int full(SeqQueue *q){
return (q->rear+1)%MaxSize==q->front;
}
//元素x进队列
void push(SeqQueue *q,dataType x){
if(full(q)) exit(1);
q->data[q->rear]=x;
q->rear=(q->rear+1)%MaxSize;
}
//出队列
void pop(SeqQueue *q){
if(empty(q))exit(1);
q->front=(q->front+1)%MaxSize;
}
//取队头元素的值
dataType front(SeqQueue *q){
if(empty(q))exit(1);
return q->data[q->front];
}
//取队尾元素的值
dataType back(SeqQueue *q){
if(empty(q)) exit(1);
int k=(q->rear-1+MaxSize)%MaxSize;
return q->data[k];
}
int size(SeqQueue *q){
return (q->rear-q->front+MaxSize)%MaxSize;
}
int main(){
SeqQueue *q=createQueue();
push(q, 80);
push(q, 90);
pop(q);
push(q, 70);
printf("队列有%d个元素\n", size(q));
printf("队头元素为:%d,队尾元素为:%d\n", front(q), back(q));
}