C语言实现队列

1.概念
队列也是一种线性的数据结构,采用先进先出的方式来管理数据,存入(队尾)和取出(队首)在两个不同的端点进行,需要记录两个端点各自的位置

队列
2.实现思路
队列是一种逻辑概念,可以使用顺序结构来实现(顺序队列),也可以使用链式结构来实现(链式队列)
顺序队列需要记录头和尾,一般的顺序队列的队列空间只能使用一次,为了重复使用队列空间,顺序队列会被设计为环形队列(循环队列)
环形队列
环形队列理论上空和满都是队首和队尾重合,为了方便区分,强制定义当队尾在队首前一个位置时队列为满
链式队列可以用带尾结点的单链表来实现,以头结点作为队首,以尾结点作为队尾,入队相当于尾部插入,出队相当于头部删除
链式队列
3.设计环形队列结构体

typedef int T;
//环形队列结构
typedef struct{
    T data[N];//队列空间
    int head,tail;//队首 队尾
}sequeue_t,*queuelist_t;

C语言实现

  • 创建空队列
queuelist_t create_emptyqueue()
{
    queuelist_t sq = (queuelist_t)malloc(sizeof(sequeue_t));
    if(sq){
        //初始化队首和队尾
        sq->head = sq->tail = 0;
    }

    return sq;
}
  • 判空/判满
//判空 0---非空 1---空
int is_empty(queuelist_t sq)
{
    //队首队尾重合为空
    return sq->head==sq->tail;
}

//判满
int is_full(queuelist_t sq)
{
    //队尾在队首的前一个
    //队首在队尾的下一个位置
    return sq->head==(sq->tail+1)%N;
}
  • 入队
void queue_push(queuelist_t sq,T dt)
{
    //判满
    if(is_full(sq)){
        printf("queue is full!\n");
        return;
    }

    //入队
    sq->data[sq->tail] = dt;
    //tail移动到下一个位置
    sq->tail = (sq->tail+1)%N;
}
  • 出队
T queue_pop(queuelist_t sq)
{
    //判空
    if(is_empty(sq)){
        printf("sq is empty!\n");
        return -EEMPTY;
    }

    //出队
    T tmp = sq->data[sq->head];
    //head移动到下一个位置
    sq->head = (sq->head+1)%N;

    return tmp;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZeroMQ的C语言实现是通过使用C语言库czmq来实现队列功能的。czmq是ZeroMQ的一个高级封装库,它提供了一组易于使用的API,用于在生产者和消费者之间建立队列通信。 使用ZeroMQ的C语言实现队列的主要特点是,不需要搭建队列环境,只需引入czmq库,并在生产者和消费者代码中调用相应的API即可。与传统的BSD开发不同,ZeroMQ中的Server和Client启动顺序没有要求。这意味着先启动Server还是先启动Client并不影响队列的正常运行。 总结起来,通过引入czmq库,并调用相应的API,ZeroMQ的C语言实现提供了一种简单而灵活的方法来实现队列功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [消息队列zeromq的c语言安装包czmq-4.2.1版本](https://download.csdn.net/download/weixin_41803458/85046594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [转载 消息队列ZeroMQ C语言](https://blog.csdn.net/wc996789331/article/details/104404412)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值