版权声明:本文为博主原创文章,未经博主允许不得转载! https://blog.csdn.net/weixin_42839965/article/details/82219529
队列:
定义:一种可以实现“先进先出”的存储结构,类似排队进站;
一端插尾部rear插入,另一端头部front删除出队;
分类:头部:front 尾部:rear指针域为空;
链式队列——链表实现;
静态队列——数组实现:
静态队列通常都必须是循环队列;
front指向第一个元素,rear指向最后一个元素的下一个元素;
删除一个元素,front往上移动一位,内存空间无法在进行使用,造成内存浪费,同理,rear;
例如,假设填充的数据是F、E、D、C、B、A,其中,front指向F的位置,rear指向B的位置,则队列的有效数据是F、E、D、C。
指针的地址可以指向有效元素的下一个元素;
例如,队列的有效数据的下标是0,1, 2, 3刚开始rear指向的是下标为4,然后在下标为4的位置插入一个有效数值,则rear指向了下标为5的位置,但是下标为5的位置不可用;
循环队列
循环队列r往上移动一位,因为是尾部,所以挪到了下方,类似周期
1、静态队列为什么必须是循环队列
因为传统的数组队列的空间只能增加,不能减少,无论是出队还是入队,存储空间都增加,造成空间浪费;
2、循环队列需要几个参数来确定及其含义的讲解
两个参数:
front、rear;
3、循环队列各个参数的含义
两个参数不同的场合有不同的含义;
初学者先谨记:
1).队列的初始化:
front和rear的值都是零;
2).队列非空
front代表的是队列的第一个元素;
rear代表的是队列的最后一个有效元素的下一个元素;
3).队列空
front和rear的值相等,但不一定是零;
4、循环队列入队伪算法讲解
两步完成:
1、将元素存入r指向的位置;
2、将r的上移一位
表达式:r=(r+1)%数组的长度
5、循环队列出队伪算法讲解
两步完成:
1、先将出队的数值保存;
2、将f的上移一位
表达式:f=(f+1)%数组的长度
6、如何判断循环队列是否为空
根据参数的关系判断:
若front与rear的值相等,则该队列一定为空;
7、如何判断循环队列是否已满
预备知识:
front与rear的值的大小不确定;
若数组有六个元素,每个元素都要使用,当front与rear相等时,无法确定队列为空还是满;
两种判断方式:
1、加一个标识参数,表示数组长度;
2、少用一个元素(如n个存放位置,存放(n-1)个元素)若front与rear紧挨,则队列已满;
用C语言伪算法表示就是:
if((r+1)/数组长度== f)//rear往后移动一位是front的判别方法,逆时针
已满;
else
不满;