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

一、基本概念

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

二、队列的实现方式

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

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);
相关推荐
熊猫_豆豆8 分钟前
YOLOP车道检测
人工智能·python·算法
rannn_1119 分钟前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
艾莉丝努力练剑23 分钟前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
张人玉23 分钟前
VisionPro 定位与卡尺测量学习笔记
笔记·学习·计算机视觉·vsionprp
觉醒大王1 小时前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
偷吃的耗子1 小时前
【CNN算法理解】:CNN平移不变性详解:数学原理与实例
人工智能·算法·cnn
YCY^v^2 小时前
JeecgBoot 项目运行指南
java·学习
云小逸2 小时前
【nmap源码解析】Nmap OS识别核心模块深度解析:osscan2.cc源码剖析(1)
开发语言·网络·学习·nmap
dazzle2 小时前
机器学习算法原理与实践-入门(三):使用数学方法实现KNN
人工智能·算法·机器学习
那个村的李富贵2 小时前
智能炼金术:CANN加速的新材料AI设计系统
人工智能·算法·aigc·cann