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

一、基本概念

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

二、队列的实现方式

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

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);
相关推荐
AIGC_北苏15 小时前
V3 Admin Vite 5.0 开源项目剖析【一】
学习
夏幻灵15 小时前
为什么要配置环境变量?
笔记·算法
铭哥的编程日记15 小时前
Manacher算法解决所有回文串问题 (覆盖所有题型)
算法
LYFlied15 小时前
【每日算法】LeetCode 300. 最长递增子序列
前端·数据结构·算法·leetcode·职场和发展
ohnoooo915 小时前
251225 算法2 期末练习
算法·动态规划·图论
车队老哥记录生活15 小时前
强化学习 RL 基础 3:随机近似方法 | 梯度下降
人工智能·算法·机器学习·强化学习
d111111111d15 小时前
STM32 电源管理模式全解析:低功耗场景该如何选型?
笔记·stm32·单片机·嵌入式硬件·学习
闲看云起15 小时前
LeetCode-day2:字母异位词分组分析
算法·leetcode·职场和发展
非凡ghost15 小时前
Floorp Browser(基于Firefox火狐浏览器)
前端·windows·学习·firefox·软件需求
weixin_4407305016 小时前
Java基础学习day01
java·开发语言·学习