循环队列判断 队列满 或 队列空
队空:Q.front == Q.rear
队满:(Q.rear+1)%MaxSize == Q.front
这种方法是空出一个存储为以易于辨别队空和队满。
#include<stdio.h>
#include<malloc.h>
#define INITSIZE 10
typedef int ElemType;
typedef struct{
ElemType *base;
int front;
int rear;
int length;
int size;
}Queue;
void init(Queue *p){
p->base = (ElemType *)malloc(INITSIZE*sizeof(ElemType));
p->front = p->rear = 0;
p->length = 0;
p->size = INITSIZE;
}
void show(Queue *p){
if(p->front == p->rear){
printf("THE QUEUE IS EMPTY\n");
return ;
}
int i = p->front;
while(i != p->rear){
printf("%2d",p->base[i]);
i = (i+1)%p->size;
}
printf("\n");
}
void push(Queue *p, ElemType e){
if((p->rear+1)%p->size == p->front){
printf("THE QUEUE IS FILLED\n");
return ;
}
p->base[p->rear] = e;
p->rear = (p->rear+1) % p->size;
p->length++;
}
void pop(Queue *p, ElemType *e){
if(p->front == p->rear){
printf("THE QUEUE IS EMPTY\n");
return ;
}
*e= p->base[p->front];
p->front = (p->front+1) % p->size;
p->length--;
}
int main(){
Queue queue;
ElemType e;
init(&queue);
push(&queue,2);
push(&queue,4);
show(&queue);
pop(&queue,&e);
show(&queue);
return 0;
}