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

一、基本概念

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

二、队列的实现方式

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

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);
相关推荐
m0_6399069422 分钟前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
ZhengEnCi1 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
秋天的怀念_David2 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Pniubi2 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6183 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang3 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
apple-mapping3 小时前
网络RTK定位学习总结
学习·网络rtk
2601_970703834 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心中有你02144 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
楚山之石4 小时前
【Lancet Neurology 】多发性硬化认知障碍的 SDMT 筛查、灰质萎缩标志与认知康复循证路径
图像处理·人工智能·学习·mri