队列 郝斌老师-数据结构

版权声明:本文为博主原创文章,未经博主允许不得转载! 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
						不满;
	

伪算法讲解

猜你喜欢

转载自blog.csdn.net/weixin_42839965/article/details/82219529