/******************************************************************************/
// 循环队列-队列的顺序表示和实现1
/******************************************************************************/
#define Queue_SIZE ((uint32_t)0x00000080)
#define Queue_SUCCESS ((uint32_t)0x00000000)
#define Queue_OVERFLOW ((uint32_t)0x00000001)
#define Queue_EMPTY ((uint32_t)0x00000002)
typedef struct
{
uint32_t *buf; //队列的起始地址
uint32_t head; //读出数据的位置
uint32_t tail; //写下一个数据的位置
uint32_t size; //队列的大小
uint32_t length; //队列中已有元素的个数
} Queue_TypeDef;
static uint32_t gQueue_Buf[Queue_SIZE];
void Queue_Init(Queue_TypeDef *Queue)
{
Queue->buf = gQueue_Buf;
Queue->tail = 0;
Queue->head = 0;
Queue->size = Queue_SIZE;
Queue->length = 0;
}
uint32_t Queue_Put(Queue_TypeDef *Queue, uint32_t data)
{
if (Queue->length == Queue_SIZE)
{
return Queue_OVERFLOW;
}
Queue->buf[Queue->tail] = data;
Queue->tail++;
if (Queue->tail == Queue->size)
{
Queue->tail = 0;
}
Queue->length++;
return Queue_SUCCESS;
}
uint32_t Queue_Get(Queue_TypeDef *Queue)
{
uint32_t data;
if (Queue->length == 0)
{
return Queue_EMPTY;
}
data = Queue->buf[Queue->head];
Queue->head++;
if (Queue->head == Queue->size)
{
Queue->head = 0;
}
Queue->length--;
return data;
}
void Queue_Empty(Queue_TypeDef *Queue)
{
Queue->tail = 0;
Queue->head = 0;
Queue->length = 0;
}
// 循环队列-队列的顺序表示和实现1
/******************************************************************************/
#define Queue_SIZE ((uint32_t)0x00000080)
#define Queue_SUCCESS ((uint32_t)0x00000000)
#define Queue_OVERFLOW ((uint32_t)0x00000001)
#define Queue_EMPTY ((uint32_t)0x00000002)
typedef struct
{
uint32_t *buf; //队列的起始地址
uint32_t head; //读出数据的位置
uint32_t tail; //写下一个数据的位置
uint32_t size; //队列的大小
uint32_t length; //队列中已有元素的个数
} Queue_TypeDef;
static uint32_t gQueue_Buf[Queue_SIZE];
void Queue_Init(Queue_TypeDef *Queue)
{
Queue->buf = gQueue_Buf;
Queue->tail = 0;
Queue->head = 0;
Queue->size = Queue_SIZE;
Queue->length = 0;
}
uint32_t Queue_Put(Queue_TypeDef *Queue, uint32_t data)
{
if (Queue->length == Queue_SIZE)
{
return Queue_OVERFLOW;
}
Queue->buf[Queue->tail] = data;
Queue->tail++;
if (Queue->tail == Queue->size)
{
Queue->tail = 0;
}
Queue->length++;
return Queue_SUCCESS;
}
uint32_t Queue_Get(Queue_TypeDef *Queue)
{
uint32_t data;
if (Queue->length == 0)
{
return Queue_EMPTY;
}
data = Queue->buf[Queue->head];
Queue->head++;
if (Queue->head == Queue->size)
{
Queue->head = 0;
}
Queue->length--;
return data;
}
void Queue_Empty(Queue_TypeDef *Queue)
{
Queue->tail = 0;
Queue->head = 0;
Queue->length = 0;
}