0
点赞
收藏
分享

微信扫一扫

数据结构——“队列 & 队列的应用“ 详细图解和代码示例 (没更新完)

队列

队列的概念

队列是限制在两端进行插入操作和删除操作的线性表,允许进行存入操作的一端称为“队尾”允许进行删除操作的一端称为“队头”。当线性表中没有元素时,称为“空队”。

特点 ;先进先出(FIFO)

什么是队列

在这里插入图片描述
我们先举一个售票处的例子:有两个栏杆挡着进入窗口进行买票,一个接一个的从栏杆后进去,在栏杆内等待,这起到公平工公正的作用,防止了插队。但是有一个坏处是,如果你尿急但还在栏杆中, 你是不能出去的,只能忍着等到你买完后从护栏前面出去
在这里插入图片描述
银行一进来很豪华是吧,没有像这样的弄两个栏杆子,它门口会有一个叫号器,那么这个东西干什么呢?这个东西啊它非常关键也非常重要,对我们来说呢,比售票处要先进一点,或者说对我们每个人来说呢,能够节约我的时间。
你原来你进来是不是要排队啊?你排队这里你在这个在那里面想出去,前面有人想想想从后面出去不行,是不是挡着。现在就不同了,你一进来啊要办理业务,一进来的话,先不管三七二十一,先取个号,取个号的话呢,这个时候你就爱干嘛干嘛了,我们等着。然后呢这边这个工作人员他如果说前面的办理完,办理完业务了没人了,他就会按一下那个有个按钮按一下某某某号,那这时候呢你就可以进去办理业务,那么你在这个时间的话呢,你就不用说是在这儿排队等了,你上厕所不影响
那么注意这个起取号器谁做的里面要不要程序呢?需要的是不是里面的程序是怎么做的?什么样的一个思路呢?那这其实就是什么利用了我们这个数据结构的队列的这个思想,

其实上面的两种案例都体现了一个队列这么一个概念。

队列的特征

特殊的线性表,先进先出(FIFO)

  1. 数据:
    对于非空的队列,表头没有直接前驱,表尾没有直接后继,其它有且仅有一个直接前驱和一个直接后继。
  2. 操作:
    只允许在表尾插入数据,在表头删除数据。

队列——顺序存储

顺序存储怎么存,它的特点是什么呢?逻辑上的先后次序把他们依次的存储在一块连续的空间里面。这是我们说的顺序的这个特点啊,那么我们如何去存呢?

首先得有这样一个结构的数据,那么我们要将这组数据存在连续存的空间里面,显然我们先要申请一块连续空间,进而才能存储,所以对列的顺序里面要有一块连续的空间
在这里插入图片描述

然后呢,我们要有front,rear两个数据的空间,我们就可以通过这两个数据来确定我这个队列中有多少个元素,那么要出队的话,通过的front来进行出队,那么入队的话,我们通过rear入队

front 和rear 其实起到一个非常重要的数据管理作用,所以我们通常把他们两个数据和我们这个存储数据的空间,给它封装在一起。

在c语言中,封装数据用结构体,封装代码用函数。

定义队列结构体

#define MAXSIZE 64      //定义队列的容量
typedef int datatype;   //定义队列中数据元素的数据类型
typedef struct
{ 
     datatype data[MAXSIZE];   //用数组作为队列的存储空间
     int front,rear;     //指示队头前一个位置和队尾位置的指针
}sequeue;    //顺序队列类型定义
sequeue *sq;  //定义指向顺序队列的指针

这些数据结构,链表,栈,队列等都作为一个工具,它第一:可以存储数据,二:管理(处理)数据。

队列顺序存储基本算法分析

  1. 初始化
    申请顺序队列的空间:malloc
    确定front和rear的位置。(空队列时,让front = rear= -1
  2. 插入
  3. 删除
  4. 判断空
  5. 判断满

队列顺序存储基本算法实现

顺序队应用

-------------------------------------------------很棒学习完了数据结构的 队列--------------------------------------------------

在这里插入图片描述

------------------------------------------------------------下期预告:二叉树------------------------------------------------------

举报

相关推荐

0 条评论