/
//文件名称:LoopQueue.h
//功能说明:实现了循环队列结构
//使用说明:包含本文件前必须定义QUEUE_ELEMENT_TYPE,它表示队列中元素的类型,还可定义队列的大小QUEUE_MAX_SIZE,默认为
// 64+1,由于队列中始终要有一个空元素,所以实际最多可存64个元素。
/
#include <memory.h>
#include <assert.h>
#ifndef BOOLEAN
#define BOOLEAN int
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
//循环队列的大寸(最大尺寸)
#ifndef QUEUE_MAX_SIZE
#define QUEUE_MAX_SIZE 64+1
#endif
#define LOOPQUEUEASSERT assert(pLQ != 0 && pLQ->front >=0 && pLQ->rear >= 0 && QUEUE_MAX_SIZE > 1)
struct LoopQueue
{
QUEUE_ELEMENT_TYPE data[QUEUE_MAX_SIZE];
long front;
long rear;
};
//初始化循环队列
void LoopQueue_Init(LoopQueue *pLQ)
{
pLQ->front = 0;
pLQ->rear = 0;
LOOPQUEUEASSERT;
}
//判断循环队列是否为空
BOOLEAN LoopQueue_IsEmpty(LoopQueue *pLQ)
{
LOOPQUEUEASSERT;
return pLQ->rear==pLQ->front;
}
//获取循环队列中存储的元素的个数
long LoopQueue_Length(LoopQueue *pLQ)
{
LOOPQUEUEASSERT;
return (pLQ->rear-pLQ->front+QUEUE_MAX_SIZE)%QUEUE_MAX_SIZE;
}
//入队
void LoopQueue_In(LoopQueue *pLQ, QUEUE_ELEMENT_TYPE element)
{
LOOPQUEUEASSERT;
if(pLQ->front==(pLQ->rear+1)%QUEUE_MAX_SIZE)
{
pLQ->rear=(pLQ->rear+1)%QUEUE_MAX_SIZE;
pLQ->data[pLQ->rear] = element;
pLQ->front=(pLQ->front+1)%QUEUE_MAX_SIZE;
}
else
{
pLQ->rear=(pLQ->rear+1)%QUEUE_MAX_SIZE;
pLQ->data[pLQ->rear] = element;
}
}
//出队
BOOLEAN LoopQueue_Out(LoopQueue *pLQ, QUEUE_ELEMENT_TYPE* pElement)
{
LOOPQUEUEASSERT;
if(LoopQueue_IsEmpty(pLQ))
return FALSE;
pLQ->front=(pLQ->front+1)%QUEUE_MAX_SIZE;
*pElement = pLQ->data[pLQ->front];
return TRUE;
}
c语言写的循环队列
最新推荐文章于 2022-09-13 14:57:43 发布