- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课件 第n三章吴伟民编著
第三章 栈和队列 教学目的: (1)掌握栈和队列的定义、特性,并能正确应用它们解决实际问题; (2)熟练掌握栈的顺序表示、链表表示以及相应操作的实现; (3)熟练掌握队列的顺序表示、链表表示以及相应操作的实现。 教学的重点和难点:顺序栈、循环队列。 第三章 栈和队列 栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性DS 3.1 栈(stack) 一、栈的定义和特点 定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈 特点:先进后出(FILO)或后进先出(LIFO) 二、栈的存储结构 1、顺序栈 3.2 队列 一、队列的定义及特点 定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表 队尾(rear)——允许插入的一端 队头(front)——允许删除的一端 队列特点:先进先出(FIFO) 二、队列的顺序存储结构 存在问题 设数组维数为M,则: 当front=0,rear=M时,再有元素入队发生溢出——真溢出 当front?0,rear=M时,再有元素入队发生溢出——假溢出 解决方案 队首固定,每次出队剩余元素向下移动——浪费时间 例2 :数组Q[n]用来表示一个循环队列,f 为当前队列头元素的前一位置,r 为队尾元素的位置。假定队列中元素的个数小于n,计算队列中元素的公式为: (A) r-f (B)(n+f-r)% n (C)n+r-f (D) (n+r-f)% n 结点定义 链队列示意图 本章小结 线性表、栈与队的异同点 相同点:逻辑结构相同,都是线性的;都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表(只是对插入、删除运算加以限制)。 不同点: ① 运算规则不同,线性表为随机存取,而栈是只允许在一端进行插入和删除运算,因而是后进先出表LIFO;队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表FIFO。 ② 用途不同,线性表比较通用;堆栈用于函数调用、递归和简化设计等;队列用于离散事件模拟、多道作业处理和简化设计等。 设定当前位置的初值为入口位置; do{ 若当前位置可通, 则{将当前位置插入栈顶; 若该位置是出口位置,则算法结束; 否则切换当前位置的东邻方块为 新的当前位置; } 否则 { } }while (栈不空); 求迷宫中一条从入口到出口的路径的算法: … … 若栈不空且栈顶位置尚有其他方向未被探索, 则设定新的当前位置为: 沿顺时针方向旋转 找到的栈顶位置的下一相邻块; 若栈不空但栈顶位置的四周均不可通, 则{删去栈顶位置;// 从路径中删去该通道块 若栈不空,则重新测试新的栈顶位置, 直至找到一个可通的相邻块或出栈至栈空; } 若栈空,则表明迷宫没有通路。 a1 a2 a3…………………….an 入队 出队 front rear 队列Q=(a1,a2,……,an) 队列的基本操作有: (1) 初始化队列InitQueue(*Q); (2) 判断队空 QueueEmpty(*Q); (3) 判断队满 QueueFull(*Q); (4) 取头元素Gethead(*Q,*e); (5) 队列插入Enqueue(*Q,e); (6) 队头删除Dequeue(*Q,*e)。 顺序队列 将队列中元素全部存入一个一维数组中,数组的低下标一端为队头,高下标一端为队尾,将这样的队列看成是顺序队列 2. 队列的顺序存储数据类型描述 typedef int maxsize; //定义队列的最大容量为maxsize Typedef struct{ Elemtype queue[maxsize]; //将队列中元素定为数组型,元素类型为elemtype int front; //队头指针 int rear; //队尾指针 }seqqueue; front=0 rear=0 1 2 3 4 5 0 队空 1 2 3 4 5 0 front J1,J2,J3入队 J1 J2 J3 rear J4,J5,J6入队 rear 1 2 3 4 5 0 J4 J5 J6 front 设两个指针front,rear,约定: rear指示队尾元素下一个位置; front指示队头元素 初值front=rear=0 空队列条件:front==rear 入队列:s
文档评论(0)