嵌入式--队列容器

嵌入式–队列容器

直接上代码,自己体会。

头文件 queue.h

#ifndef __QUEUE_H_
#define __QUEUE_H_

#include <stdint.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    void *base;                            /*队列容器基地址*/
    uint16_t element_size;                 /*队列元素大小*/
    uint16_t size;                         /*队列容器可容纳元素个数*/
    uint16_t front;                        /*队首*/
    uint16_t rear;                         /*队尾*/
}queue_t;

bool QueueCreate(queue_t *q,  void *container, int size, int element_size); 

bool QueuePeek(queue_t *q,  void **element);

bool QueuePut(queue_t *q,  void *element);

bool QueueGet(queue_t *q,  void *element);

bool QueueDelete(queue_t *q);

void QueueClear(queue_t *q);

int QueueSize(queue_t *q);

#ifdef __cplusplus
}
#endif

#endif

源文件 queue.c

#include <stddef.h>
#include <string.h>

#include "queue.h"

bool QueueCreate(queue_t *q, void *base, int size, int element_size)
{
    if (q == NULL || base == NULL || size== 0 || element_size == 0)
    {
        return false;
    }
    
    q->base         = base;
    q->size         = size;
    q->element_size = element_size;
    q->front        = q->rear = 0;
    return true;
}

static bool QueueIsEmpty(queue_t *q)
{
    return q->front == q->rear;
}

static bool QueueIsFull(queue_t *q)
{
    return (q->rear + 1) % q->size == q->front;
}

bool QueuePut(queue_t *q,  void *element)
{
    if (QueueIsFull(q))
    {
        return false;
    }
    
    memcpy((unsigned char *)q->base + q->rear * q->element_size, element, q->element_size);
    q->rear = (q->rear + 1) % q->size;
    return true;
}

bool QueueGet(queue_t *q,  void *element)
{
    if (QueueIsEmpty(q))
    {
        return false;   
    }
    memcpy(element, (unsigned char *)q->base + q->front * q->element_size, q->element_size);
    q->front = (q->front + 1) % q->size;
    return true;
}

bool QueuePeek(queue_t *q, void **element)
{
    if (QueueIsEmpty(q))
    {
        return false;   
    }
    
    *element = (void *)((unsigned char *)q->base + q->front * q->element_size);
    return true;
}

bool QueueDelete(queue_t *q)
{
    if (QueueIsEmpty(q))
    {
        return false;   
    }
    q->front = (q->front + 1) % q->size;
    return true;
}

int QueueSize(queue_t *q)
{
    return (q->rear + q->size - q->front ) % q->size;
}

void QueueClear(queue_t *q)
{
    q->front = q->rear = 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: glib-2.26.1是一个开源的C语言库,提供了一系列的数据结构、算法、线程支持和基本功能。它是GNOME桌面环境的重要组成部分,被广泛用于开发Linux操作系统上的桌面应用程序。 glib-2.26.1的核心特点之一是提供了高效的数据结构。它包括链表、数组、哈希表等常用的数据结构,这些数据结构的实现都经过了优化,能够在各种复杂的场景中快速高效地进行数据操作。另外,glib-2.26.1还提供了一套功能强大的字符串处理函数,方便开发者对字符串进行操作,比如拷贝、连接、替换等。 此外,glib-2.26.1还提供了线程支持。它提供了一套封装了底层系统调用的线程库,方便开发者创建、管理和同步多线程应用程序。开发者可以使用glib-2.26.1的线程库实现并发执行的任务,提高应用程序的效率。 除了数据结构和线程支持,glib-2.26.1还提供了一些基本功能,如内存管理、错误处理、事件循环等。内存管理模块提供了内存分配和释放的函数,帮助开发者更安全地使用内存资源。错误处理模块提供了一组用于报告和处理错误的函数,方便开发者进行错误处理。事件循环模块则提供了一个用于处理各种事件的框架,开发者可以使用该框架实现事件驱动的应用程序。 总的来说,glib-2.26.1是一个功能丰富、高效、稳定的C语言库,被广泛应用于Linux操作系统上的桌面应用开发中。它提供了丰富的数据结构、线程支持和基本功能,为开发者提供了方便和快捷的开发工具,可以大大提高应用程序的开发效率和性能。 ### 回答2: glib-2.26.1是一个开源的通用性高的C语言库。它提供了许多数据结构、算法和函数,用于处理常见的编程任务。glib-2.26.1是GLib系列库的一个版本,由GNOME开发,并在许多GNU/Linux发行版中广泛使用。 glib-2.26.1包含了许多功能强大的模块。其中,最重要的是GObject,它是一个面向对象的框架。GObject提供了类、接口、属性、信号等概念,使得C语言可以以面向对象的方式进行编程。它还包含了一组方便的宏,用于定义和管理对象的生命周期。 另一个重要的模块是GLib的容器,如数组、链表、哈希表和二叉树等。这些容器提供了高效的数据结构,可用于存储和操作数据。此外,glib-2.26.1还提供了字符串处理、内存管理、文件操作、线程管理等功能。 glib-2.26.1还有许多其他特性,如国际化支持、消息传递机制、命令行解析等。它还提供了一些工具,如调试器、性能分析等。通过这些特性,开发人员可以更轻松地构建高效、可靠的应用程序。 总之,glib-2.26.1是一个非常实用的库,可以帮助开发人员加快开发速度,提高应用程序的质量。无论是开发桌面应用还是嵌入式系统,glib-2.26.1都是一个强大的选择。 ### 回答3: glib-2.26.1是一个常见的开源软件库,主要用于在C编程语言中提供一些通用的功能。它是GLib库的一个版本,由GNOME项目开发和维护。 GLib库旨在为开发者提供一些常用的数据结构和算法,以及一些系统和平台相关的功能。通过GLib,开发者可以更方便地编写可移植性强的程序。GLib库的主要特点如下: 1. 数据结构:GLib提供了一些常见的数据结构,如链表、队列、哈希表等,使得开发者能够更高效地处理数据。 2. 字符串处理:GLib提供了一些字符串处理的函数,如字符串拼接、查找、替换等,方便开发者对字符串进行操作和处理。 3. 文件操作:GLib包含了一些文件操作的函数,如读写文件、创建目录、遍历文件等,方便开发者对文件进行操作。 4. 内存管理:GLib提供了一些内存管理的函数,如动态内存分配、释放等,有效地管理和优化程序的内存使用。 5. 线程支持:GLib提供了一些线程相关的函数,如创建线程、线程同步等,方便开发者编写多线程的程序。 6. 输入输出支持:GLib提供了一些输入输出相关的函数,如读取和写入文件、网络通信等,使得程序能够更好地与外部环境交互。 总的来说,glib-2.26.1是一个功能丰富的开源软件库,为开发者提供了一些常用的功能和工具,方便开发者编写高效、可靠且可移植性强的程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值