为了解决一般队列“假溢出”的问题,出现了循环队列,即最后一个元素的后继是第一个元素。
在循环队列中,我用的是少用一个元素空间的方法来区别队空和队满。
队空:q->front = q ->rear;队满:(q->rear+1)%MAXSIZE = q->front,具体代码如下:
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 10
typedef struct{
int data[MAXSIZE];
int front,rear;
}CSeQueue;
//队列的初始化
CSeQueue *Init_Queue(){
CSeQueue *q;
q = (CSeQueue *)malloc(sizeof(CSeQueue));
q->front = q->rear = 0;
return q;
}
//判队满
int Full_Queue(CSeQueue *q){
if((q ->rear + 1) % MAXSIZE == q ->front){
return 1;
}else
return 0;
}
//入队
int In_Queue(CSeQueue *q,int x){
if(Full_Queue(q)){
printf("队满");
return 0;
}
else{
q ->rear = (q ->rear + 1) % MAXSIZE;
q ->data[q ->rear] = x;
return 1;
}
}
// 判队空
int Empty_Queue(CSeQueue *q){
if(q ->front == q ->rear)
return 1;
else
return 0;