Arduino 数据结构: 队列Queue

Queue 库提供了一个通用的 C++ 动态队列实现,专为在 Arduino 项目中使用而定制。

Queue 类旨在以先进先出 (FIFO) 方式管理元素集合。非常适合需要顺序处理顺序的任务,例如事件处理或任务调度。

特征

  • 泛型类型支持:可以存储任何数据类型的元素。
  • 动态调整大小:自动调整大小以容纳超过其初始容量的元素。
  • 基本队列作:支持入队(添加)、出队(删除)和 peek(查看前元素)作。
  • 实用程序函数:包括检查队列是空还是满、清除队列和计算元素的方法。

用法

要使用队列库,请将其包含在 Arduino 草图的开头:

#include "Queue.h"

初始化

创建一个 Queue 对象,指定它将保存的元素的数据类型:

Queue<int> myQueue;

添加元素

使用 enqueue 方法将元素添加到队列中:

myQueue.enqueue(10);
myQueue.enqueue(20);

删除元素

使用 dequeue 删除队列前面的元素:

int frontElement = myQueue.dequeue();

查看最前面的元素

使用 peek 访问前面的元素而不将其移除:

int peekElement = myQueue.peek();

检查队列状态

确定队列是空的还是满的:

bool isEmpty = myQueue.isEmpty(); 
bool isFull = myQueue.isFull();

清除队列

从队列中删除所有元素:

myQueue.clear();

打印队列元素

出于调试目的,请打印队列中的所有元素:

myQueue.print();

计数元素

检索队列中的元素数:

size_t elementCount = myQueue.count();

安装库

将Queue.h文件复制到arduino项目内即可。

示例代码

#include <Arduino.h>
#include "Queue.h"

// 创建一个队列对象
Queue<int> queue;

void setup() {
    Serial.begin(9600);
    // 放一些数据到队列
    queue.enqueue(10);
    queue.enqueue(20);
    queue.enqueue(30);
    queue.enqueue(40);
    Serial.println(queue.peek()); // 输出队列首的值
    Serial.println(queue.isFull()); // 队列未满,输出 "false" 
    Serial.println(queue.isEmpty()); // 队列非空,输出 "false" 
    Serial.println(queue.count()); // 队列内元素数据,输出 "4" 

    // 从队列取数据
    int value = queue.dequeue();
    Serial.println(value); // 输出取出的数据

    Serial.println(queue.peek()); 
    queue.clear(); // 清空队列
}

代码:https://github.com/braydenanderson2014/C-Arduino-Libraries/blob/main/lib/Queue

- 本文为本站原创文章,转载请保留出处。
- 文章链接:https://www.xpstem.com/article/2000408

08-29   阅读(10)   评论(0)
 标签: 编程 Arduino 数据结构

涨知识
导轨

导轨又称滑轨、线性导轨、线性滑轨,用于直线往复运动场合,拥有比直线轴承更高的额定负载, 同时可以承担一定的扭矩,可在高负载的情况下实现高精度的直线运动。

评论:
相关文章
小鹏浇花套件单机版程序V1.0.0

本程序是小鹏物联网智能浇花套件的单机版程序(不连接物联网),供同学们参考。


Arduino 数据结构: ArrayList

ArrayList 类是一个 C++ 模板类,它提供了 ArrayList 的实现,以便轻松存储任何指定类型的值。它允许使用索引进行高效存储和检索,支持排序操作。


ESP32 FreeRTOS 双核使用

ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。


理解 MSBFIRST(最高有效位)和 LSBFIRST(最低有效位)

在本文中,先解释 MSB(最高有效位)和 LSB(最低有效位)的概念,以及 MSBFIRST 和 LSBFIRST。然后展示了 MSBFIRST 和 LSBFIRST 的使用如何影响移位寄存器的输出。


Arduino 和 TB6612FNG 驱动直流电机

TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速与方向,输入电压在3V~12V,因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。


Arduino-ESP32 Preferences库使用详解

Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。


Arduino Serial 接收数字

在Arduino中,通过串行端口接收数字通常涉及使用Serial.read()、Serial.readString()、Serial.parseInt()等方法。



Arduino 高级编程:控制乐高EV3马达

本文介绍一种使用Arduino开发板控制乐高EV3马达的方法。


Arduino 随机数

要生成随机数,可以使用Arduino随机数函数random()。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。