数据结构与算法之队列与嵌入式软件的应用

数据结构之队列篇

1 队列之特点及在嵌入式软件中的应用

队列(queue)是一个简单线性表,它是一个允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列(queue)遵循先进先出(FIFO, First-In-First-Out)的特征,和**栈(LIFO, Last In First Out)**刚好相反。
主要鉴于FIFO的结构特点,在嵌入式软件应用中主要应用于异步处理的buffer,例如,在CAN或者SPI等接口在中断接收到数据,存放在队列中(入队),而实际的处理解析(出队)将在其他线程或者任务中实现。另外还应用与先进先出的阻塞的某些特殊的应用环境,例如笔者做过的一个错误消息的弹出框,依次等待按键按下,依次弹出已经保存好的错误消息

2循环队列的由来

循环队列的目的主要是为了解决在队列元素出队以后,剩余空间的浪费问题,如下
出队后J2,J1,空间浪费

3 C代码

/
这个创建的是一个循环队列:
初始时:head == tail == 0
其中为了判断队列是否为空或是否为满了, 有必要记录上一次的操作是什么
1、如果上次操作是:入队列 && head == tail :说明是队列满了
2、如果上次操作是:出队列 && head == tail : 说明是队列为空了。

*/

#include"stdio.h"
#include"stdlib.h"
#define Boolean unsigned char
#define UserDataType int
typedef struct
{
   
	UserDataType *data;
	int head;
	int tail;
	int maxRoom;
	Boolean lastAction;
}QueueData_Type;
#define OUT_QUEUE 1
#define IN_QUEUE  0
#define TRUE      1
#define FALSE     0
//对队列进行初始化
Boolean InitQueue(QueueData_Type **queue,int maxRoom);
//销毁队列					
void destoryQueue(QueueData_Type **queue);								
//判断队列是否满了
Boolean isQueueFull(QueueData_Type *queue);								
//判断队列是否满了
Boolean isQueueEmpty(QueueData_Type *queue;								
//入队列
Boolean InQueue(QueueData_Type *queue, USER_TYPE data);					
//出队列
Boolean  OutQueue(QueueData_Type *queue, USER_TYPE *data);					
//读取队列最头位置
Boolean readQueue(QueueData_Type queue, USER_TYPE *value);				

/*创建队列*/
Boolean InitQueue(QueueData_Type **queue,int maxRoom)
{
   
	Boolean ret = TRUE;
	if (*queue == 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值