C语言之 如何写好一个循环队列

循环队列

循环队列在我们传递数据的过程中经常会用到,相对于直线队列来讲,直线队列在元素出队后,头指针向后移动,导致删除元素后的空间无法在利用,当变成循环队列之后,删除元素后的空间仍然可以利用。在这里插入图片描述

  • 声明一块RAM空间
#define MAX_SIZE 20
static ev_queue[MAX_SIZE] = { 0 };
static int ev_front = -1;
static int ev_rear = -1;
static int ev_size = 0;

-判断队列是否为满

boolean is_ev_queue_full( void )
{
return MAX_SIZE == ev_size;
}

-判断队列是否为空

boolean is_ev_queue_empty( void )
{
return 0 == ev_size;
}

-向队列添加元素

boolean add_event ( event ev )
{
// If queue is full return FALSE
if( is_ev_queue_full() )
    {
    return FALSE;
    }
else
    {
    // next node index
    ++ev_rear;//由于初始值为-1,这里变为0
    ev_rear %= MAX_SIZE;//下标超出最大范围之后重置
    // Increase size
    ++ev_size;//记录队列使用情况
    ev_queue[ev_rear] = ev;//这里直接赋值
    }
return TRUE;
}

-从队列获取数据

boolean get_event( event *ev )
{
if( is_ev_queue_empty() )
    {
    return FALSE;
    }
// Move to first valid item's index
++ev_front;
ev_front %= MAX_SIZE;
// Decrease size
--ev_size;
// get data
*ev = ev_queue[ev_front];
return TRUE;
}

-清空队列

//清空队列只需将头尾和使用size直接重置就行了
void vp_clear_tc_ev_queue( void )
{
ev_front = -1;
ev_rear = -1;
ev_size = 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值