- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.2.1 队列的定义(3/3) 练习:请单项选择 某队列给定的输入项为1,2,3,4,5,则以下可能的一种输出是: A 5,4,3,2,1; B 1,2,3,4,5; C 1,3,2,4,5; D 1,5,2,4,3; √ 3.2 队列 3.2.1 队列的定义 3.2.2 队列的顺序存储——顺序队 3.2.3 队列的链式存储——链队 3.2.4 队列的应用 3.2.2 队列的顺序存储——顺序队 (1/9) 顺序队: 利用内存中一组地址连续的存储单元 来存储队列中的数据元素 利用一维数组来实现队列的顺序存储 需设头、尾两个“指针” front 和 rear 来分别指示队列的队头、队尾 front和rear不是C语言中指针类型的数据 front和rear是整型数据 front和rear用来记录当前队头、队尾元素所在数组单元的下标号 特殊约定: front总是指向队列中实际队头元素,而rear则指向实际队尾元素的下一个位置 a1 a2 a3 …… ai 0 1 2 i-1 front=0 rear=i i 3.2.2 队列的顺序存储——顺序队 (2/9) 顺序队的存储结构定义 typedef struct sqlist {int data[MaxSize]; int length; }SqList; //顺序表 typedef struct sqstack {int data[MaxSize]; int top; }SqStack; //顺序栈 typedef struct sqqueue {int data[MaxSize]; int front; int rear; }SqQueue; //顺序队 SqQueue *q; q=new SqQueue; …… q q-data[0] q-data[1] q-data[2] q-data[MaxSize-1] q-front q-rear a1 …… q q-data[0] q-data[1] q-data[2] q-data[MaxSize-1] q-front q-rear 0 0 a2 3.2.2 队列的顺序存储——顺序队 (3/9) 顺序队的基本操作图解 初始化 入队 …… q q-data[0] q-data[1] q-data[2] q-data[MaxSize-1] q-front q-rear SqQueue *q; q=new SqQueue; q-front=q-rear=0;//初始化 0 0 1 2 q-data[q-rear]=x; q-rear++; //入队 3.2.2 队列的顺序存储——顺序队 (4/9) 顺序队的基本操作图解 队满 出队 队空 a1 a2 …… an 0 MaxSize q q-data[0] q-data[1] q-data[2] q-data[MaxSize-1] q-front q-rear q-rear=MaxSize;//队满 a1 a2 …… an 0 MaxSize q q-data[0] q-data[1] q-data[2] q-data[MaxSize-1] q-front q-rear 1 2 q-front++;//出队 q-front=q-rear;//队空 顺序循环队 问题的引入 q a1 a2 0 q-data[0] q-data[1] q-data[2] q-front q-rear q-data[3] q-data[4] q-data[5] 2 2 q-data[0] q-data[1] q-data[2] q-front q-rear q-data[3] q-data[4] q-data[5] 2 a3 a4 a6 2 q-data[0] q-data[1] q-data[2] q-front q-rear a5 q-data[3] q-data[4] q-data[5] 6 a1,a2相继入队 a1,a2相继出队 a3,a4,a5又相继入队 假溢出:系统作为队列用的存储区还没有用完,但是队列却发生了溢出。 解决“假溢出”的方法: (1)、平移元素 3.2.2 队列的顺序存储——顺序队 (5/9) (2)、构建循环队列 0 1 2 3 4 5 a4 a5 q-front=2 q-rear=6 a6 a3 3.2.2 队列的顺序存储——顺序队 (6/9) 顺序循环队 目的:能充分的使用数组中的存储空间,避免“假溢出”
文档评论(0)