5. C语言-循环队列

理解关键:(1) 实质是数组

                  (2) 先进先出

                  (3) 循环公式:value=(value+1)%MAX  【在MAX范围内从0到MAX-1变化】

数据存储格式:

buf[0] buf[1] buf[2] buf[3] buf[4]  
data1(front) data2 data3 data4 data5 无效|rear
typedef struct
{
 datatype buf[MAX]; //队列数据 
 int front; //队列的头
 int rear;  //队列的尾
}loopQueue; 

创建循环队列:

loopQueue *create_seqqueue()
{
 loopQueue *lq = (loopQueue *)malloc(sizeof(loopQueue));
 if(lq == NULL) return NULL;
 lq->front = 0;
 lq->rear = 0;

 return lq;
}

进队:

void enter_loopqueue(loopQueue *lq, datatype data)
{
 lq->buf[lq->rear] = data; //队列尾加数据
 lq->rear = (lq->real + 1)%MAX; //更新队尾位置
}

出队:

datatype pop_loopqueue(loopQueue *lq)
{
 if(lq->front == lq->rear) return -1; //队列为空就返回
 datatype data;
 data = lq->buf[lq->front]; //从头取出数据
 lq->front = (lq->front + 1)%MAX; //更新头位置
 return data;
}

判断对空:lq->front == lq->rear;  (头等于尾)

判断对满:(lq->rear + 1)%MAX == lq->front;  (尾加一等于头)

你可能感兴趣的:(5. C语言-循环队列)