46 lines
1.0 KiB
C
46 lines
1.0 KiB
C
#include "queue.h"
|
|
|
|
// 1. 初始化队列
|
|
void queue_init(struct queue *pq)
|
|
{
|
|
pq->tail = pq->head = 0;
|
|
}
|
|
// 2. 队列空判断, 空返回1, 否则返回0
|
|
int queue_is_empty(struct queue *pq)
|
|
{
|
|
return pq->head == pq->tail;
|
|
}
|
|
// 3. 队列满判断, 满返回1, 否则返回0
|
|
int queue_is_full(struct queue *pq)
|
|
{
|
|
int tail_next = (pq->tail + 1) % QUEUE_DATA_SIZE;
|
|
|
|
if (tail_next == pq->head)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
// 4. 入队, 成功返回1 ,失败返回0
|
|
int queue_enqueue(struct queue *pq, int value)
|
|
{
|
|
if (queue_is_full(pq))
|
|
return 0;
|
|
pq->data[pq->tail] = value;
|
|
pq->tail = (pq->tail + 1) % QUEUE_DATA_SIZE;
|
|
return 1;
|
|
}
|
|
// 5. 出队, 成功返回1 ,失败返回0
|
|
int queue_dequeue(struct queue *pq, int *pvalue)
|
|
{
|
|
if (queue_is_empty(pq))
|
|
return 0;
|
|
*pvalue = pq->data[pq->head];
|
|
pq->head = (pq->head + 1) % QUEUE_DATA_SIZE;
|
|
|
|
return 1;
|
|
}
|
|
// 7. 清空队列
|
|
void queue_clear(struct queue *pq)
|
|
{
|
|
pq->head = pq->tail = 0;
|
|
}
|