# include <stdio.h>
# include <stdlib.h>
# define MAXSIZE 11
# define DATATYPE int
typedef struct{
DATATYPE data[MAXSIZE];
int rear,front;
}QUEUE;
void init_queue(QUEUE *q){
q->front = q->rear = 0;
}
int isEmpty(QUEUE *q){
int n;
if(q->front==q->rear)
n = 1;//为空队列
else
n = 0;
return n;
}
void add_queue(QUEUE *q,DATATYPE n){
if((q->rear+1)%MAXSIZE==q->front)
printf("full queue!");//判断队列是否已满
else{
q->rear = (q->rear+1)%MAXSIZE;
q->data[q->rear] = n;
// printf("add successful!\n");
}
}
DATATYPE del_queue(QUEUE *q){
// 出队列,先进先出
if(isEmpty(q)){
printf("empty queue!");
return;
}else{
int n = q->data[(q->front+1)%MAXSIZE];
q->front = (q->front+1)%MAXSIZE;
return n;
}
}
DATATYPE getHead_queue(QUEUE *q){
if(isEmpty(q)){
printf("empty queue!");
return;
}
return q->data[(q->front+1)%MAXSIZE];
}
int length_queue(QUEUE *q){
return (MAXSIZE+q->rear-q->front)%MAXSIZE;
}
int main()
{
QUEUE *q = (QUEUE*)malloc(sizeof(QUEUE));
init_queue(q);
int i = 0;
for(i;i<10;i++){
add_queue(q,i);
}
printf("length:%d\n",length_queue(q));
for(i = 0;i<10;i++){
printf("i:%d,delQueue:%d\n",i,del_queue(q));
}
printf("length:%d\n",length_queue(q));
}
这个队列采用了多留一个空位来区分队列是否已满以及队列是否为空