循环队列-队列的顺序表示和实现1

/******************************************************************************/
// 循环队列-队列的顺序表示和实现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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值