嵌入式第二十八篇——数据结构——队列

一、基本概念

队列是一种先进先出的线性数据结构,元素从队尾插入,从队头删除。队列的操作主要包括入队和出队

二、队列的实现方式

队列可以通过顺序表或链表实现。顺序表实现的队列需要处理循环队列的情况以避免空间浪费,链表实现的队列则更灵活。

1、顺序表实现循环队列
复制代码
typedef int DATATYPE;

typedef struct queue {
DATATYPE *ptr;//动态分配的队列存储空间
int tlen;//队列总容量
int head;//队头指针
int tail;//队尾指针
}SeqQueue;//队列结构体定义

int DestroySeqQueue(SeqQueue *queue);//销毁队列
DATATYPE QuitSeqQueue(SeqQueue *queue);//出队
int EnterSeqQueue(SeqQueue *queue, DATATYPE data);//入队
int IsEmptySeqQueue(SeqQueue *queue);//队是否为空
int IsFullSeqQueue(SeqQueue *queue);//队是否为满
SeqQueue *CreateSeqQueue(int len);//创建指定容量的队

该代码实现了一循环顺序队列,通过头尾指针(head和tail)来管理队列操作。当head和tail相等时队列为空当(tail+1)%tlen等于head时队列为满。这种实现方式可以高效利用数组空间,避免假溢出问题。

2、链表实现队列
c 复制代码
// 定义人员信息结构体
typedef struct person {
    char name[32];  // 姓名,最大32字符
    char sex;       // 性别
    int age;        // 年龄
    int score;      // 分数
} DATATYPE;         // 数据类型别名

// 定义队列节点结构体
typedef struct quenode {
    DATATYPE data;          // 存储数据
    struct quenode *next;   // 指向下一个节点的指针
} LinkQueNode;              // 链式队列节点类型别名

// 定义队列结构体
typedef struct {
    LinkQueNode *head;  // 队首指针
    LinkQueNode *tail;  // 队尾指针
    int clen;           // 当前队列长度
} LinkQue;              // 链式队列类型别名
c 复制代码
// 创建空链式队列
LinkQue * CreateLinkQue();

// 入队操作:将新节点添加到队尾
int EnterLinkQue(LinkQue *lq, DATATYPE* newnode);

// 出队操作:删除队首节点
int QuitLinkQue(LinkQue *lq);

// 获取队首元素(不删除)
DATATYPE* GetHeadLinkQue(LinkQue *lq);

// 获取队列当前长度
int GetSizeLinkQue(LinkQue *lq);

// 判断队列是否为空
int IsEmptyLinkQue(LinkQue *lq);

// 销毁队列
int DestroyLinkQue(LinkQue *lq);
相关推荐
人邮异步社区3 小时前
如何系统地学习 C++ 语言?
开发语言·c++·学习
知识分享小能手3 小时前
概理论与数理统计学习教程,从入门到精通,在数理统计中应用R软件(21)
开发语言·学习·r语言
浔溺4 小时前
al+大数据每日学习笔记28
笔记·学习
1000世界小札9 小时前
《大话数据结构》第9章精读:归并排序与快速排序完整 C++ 实现
数据结构·c++·算法
2601_9561219711 小时前
背包基础篇(01、完全、分组、多重、混合)
c++·算法·动态规划
xian_wwq12 小时前
【学习笔记】-深度认知系列-第2讲-大模型到底是什么?——拆解“参数、训练、推理”
笔记·学习·深度认知
兴通物联科技13 小时前
SMT PCB 微小 DataMatrix 码扫不动问题分析 兴通 XT8601B 600 万像素工业读码器落地实践
大数据·人工智能·单片机·嵌入式硬件·算法·计算机视觉
lzhdim13 小时前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
那年窗外下的雪.15 小时前
AIDC 学习日志|第 15 天|EVPN 多归属故障收敛与撤销机制
网络·学习·php