队列的介绍

一、队列的定义

队列(Queue)是一种先进先出(First In First Out,FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。在队列中,允许插入的一端称为队尾(rear),允许删除的一端则称为队头(front)。队列的操作与栈的操作类似,不同的是,删除是在表的头部(即队头)进行。
假设队列为q=(a1,a2,…,an),那么a1就是队头元素,an则是队尾元素。队列是按照a1,a2,…,an的顺序进入的,退出队列也只能按照这个次序依次退出。也就是说,只有在a1,a2,…,an都离开队列之后,an才能退出。图1所示为队列示意图:

队列的介绍_第1张图片

                                   图1 队列示意图

特别地,队列中没有元素时,称为空队列。

二、队列的类型

队列有两种存储表示,顺序表示和链式表示。

1.顺序队列

顺序队列是用数组实现的,首指针在出队的时候移动,尾指针在入队的时候移动,需要考虑队列为空和队列为满的两种情况。

2.链式队列

链式队列是用链表实现的,首指针不移动始终指向头节点,尾指针在入队的时候移动,只考虑队列为空的情况(不用考虑满是因为链表长度在程序运行过程中可以不断增加,只要存储空间够malloc就能申请内存空间来存放节点)

三、队列的用处

1、用于任务间通信,尤其对于单任务系统,多个任务都操作一个队列,比如,A任务往队列里扔数据,B任务负责检查队列,只要有数据就进行处理,起到了两个任务通信的效果,同样可以把这个数据理解为消息,A任务给B任务发消息,B任务根据不同的消息(数据)做不同的处理。

2、缓冲数据。最常见的就是串口接收数据,搞一个环形buf队列,收到数据就放到这个队列中,当然这个buf肯定是有长度的,不能一直存储数据。正常用法下,得及时读取走,这样就能一直接收数据不丢失。

引用

[1]https://blog.csdn.net/qiaofengzxq/article/details/102671885
[2]https://www.bilibili.com/read/cv6366407
[3]https://zhidao.baidu.com/question/1700174232599052228.html

你可能感兴趣的:(数据结构,队列,栈和队列,数据结构)