C语言笔记(14)数据结构-队列的实现及应用

在这里插入图片描述
相当于排队买票,公平公正 , ,只允许在表尾插入数据, 只允许在表头删除数据,
而栈 是只允许在一头插入和删除数据
在这里插入图片描述
1。线性特征
2。操作(管理)先进先出

线性表 : 操作 可以再任何地方插入或者删除数据
栈 : 它是只能在一端进行插入和删除的操作
队列 : 表尾插入数据, 表头删除数据。插入删除是在队列的两边进行的不能在一端。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
存储分为 :
顺序存储 和 链式存储 。
有这么一组数据 1 2 3 4 5 6 它符合先进先出的特征 , 现在我 要借助这个顺序队列来对这组数据进行存储 。顺序队列存储怎么存 ?
顺序存储特点 : 是按照数据的逻辑上的先后顺序, 依次的存储在一块连续的空间里面。 如何去存呢 ? 首先要有一组有这样的结构的一组数据, 那我们要将这组数据存储在连续存储的空间里面,显然我们要事先申请一块连续空间, 进而存储。(得有一块连续的空间),按C语言的话说,就应该是一个数组。 申请到之后这个时候我们就可以按照次序存储在这样一个连续空间里面, 但是存储数据永远不是我们的目标, 我们的目的是借助计算机去处理这种数据, 存储只是一种手段一种过程。
存储好之后如何才能按照队列的思路来实现它呢 ? 我们会另外再去定义一个数据叫front ,然后再定义一个数据叫rear ,为什么要定义这两个数据呢 ?因为队列允许在一端插入, 在另一端删除,插入和删除谁都不认识谁,在两端进行,限制在两端进行。 front表示对头前一个位置的下标, 规定,让
front 始终存放的是我们 对头前一个位置的下标,
rear始终存放的是队尾的下标,
这样我们通过这两个位置来确定队列中有多少个元素, 有多少个数据,那么要出队的话我就通过front来进行出队,如果要入队的话我们就通过rear来入队,所以我们这两个数据 对于我们整个的一个数据管理起到一个非常重要的作用,所以我们通过把他们两个 把他这两个数据和我们这个存储数据的空间给它封装在一起,
在我们的C语言当中要把不同类型的数据封装起来的话一般我们用
结构体,封装不同数据。
如果要封装一段代码 用到C语言的函数 。
那么我们把刚才的数据和front和rear封装在一起就是顺序队列 结构,

我们写数据结构,这些不管是线性表还是栈,队列这些东西,其实就是做了一个工具,这些工具可以
1.存储数据
2.管理数据 处理数据
为了能够使得我们做的这些工具能够处理不同的数据, 或者处理不同类型的数据,我们通常会用这句话typedef int datatype来定义我们的抽象类型如果我们把这个工具做好了,能让它通用, 比如处理一个学生的数据, 我就用datatype 来表示一个学生的类型,如果我要处理一些整数我就 让datatype表示整数,如果我要处理一个公司的员工,职工。那么我就可以把这个datatype定义成一个工人的类型,这样我们的队列算法就不用改了,我只需要改这一行 typedef int datatype 这个类型我们里面存储的数据就变了。
在这里插入图片描述
front存放的是对头的前一个位置的下标, rear存放的是队尾的下标,这是一种规定,其实在队列当中有两种规定一个是说的这种规定。另外一些人可能会有另外方式的规定,比如说 front 表示对头的小标, rear表示队尾的下一个小标。其实这两种思路是一样的,只是跟每个人的习惯,风格会有一些区别。都可以实现我们这个队列。
在这里插入图片描述
队列如何去实现它的算法,那在实现算法之前,我们先分析一下, 一般我们要去做这样一个工具,或实现这队列工具的一个算法的话。
它一般是从这几个方面出发的 :
1.初始化
2.插入
3.删除
4.是否空
5.是否满 这些基本算法。
在这里插入图片描述
如何对队列初始化 ?
1.申请一个顺序队列的空间
2.把front 和rear的值确定下来 , front = rear = -1
搞一个空队列出来, 怎么做 ? 习惯性让front和rear的值都等于-1,
因为申请空间以后, 申请的空间都有下标 比如申请了一个 5个地址空间 ,下标位 0 1 2 3 4 ,因为是空的,所以我们让front 和rear指向队列前面的一个下标值, 0 -1 = -1 , 这样我们要插入一条数据,只需要让rear +1 我们就可以放数据了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值