第三章堆栈和队列技术总结.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
主要内容 知识点 栈与队列的特征 栈与递归 循环队列 重点难点 栈的操作 递归 循环队列 栈与队列的综合应用 内容安排 3.1 栈的类型定义 3.2 栈类型的实现 3.3 栈的应用举例 3.4 队列的类型定义 3.5 队列类型的实现 栈(stack)的类型定义 栈 是操作受限制的线性表 定义:仅在表尾进行插入或删除操作的线性表; 概念: 栈顶:在栈顶操作,是表尾,通常用top表示 ; 栈底:bottom,是表头; 空栈: 空表; 通常栈底固定,栈顶移动。 栈(stack)示意图 栈操作示例(1/2) 栈操作示例(1/2) 3.1 栈的类型定义 内容安排 3.1 栈的类型定义 3.2 栈类型的实现 顺序栈 链栈 3.3 栈的应用举例 3.4 队列的类型定义 3.5 队列类型的实现 栈的顺序存储表示 InitStack在顺序栈中的实现 Push在顺序栈中的实现 Pop在顺序栈中的实现 链栈 内容安排 3.1 栈的类型定义 3.2 栈类型的实现 3.3 栈的应用举例 3.4 队列的类型定义 3.5 队列类型的实现 例一 数制转换 算法基于原理: N = (N div d)×d + N mod d 例如:(1348)10 = (2504)8 ,其运算过程如下: 编程实现 例二、 括号匹配的检验 假设在表达式中正确的格式为: ([]())或[([ ][ ])] 不正确的格式为 [( ])或([( ))或 (()]) 则 检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。 用期待的急迫程度描述括号匹配 即后出现的“左括弧”,它等待与其匹配的“右括弧”出现的“急迫”心情要比先出现的左括弧高 对“左括弧”来说,后出现的比先出现的“优先”等待检验 对“右括弧”来说,每个出现的右括弧要去找在它之前“最后”出现的那个左括弧去匹配 显然,必须将先后出现的左括弧依次保存,为了反映这个优先程度,保存左括弧的结构用栈最合适 这样对出现的右括弧来说,只要栈顶元素相匹配即可。如果在栈顶的那个左括弧正好和它匹配,就可将它从栈顶删除 算法的设计思想 1)凡出现左括弧,则进栈; 2)凡出现右括弧 首先检查栈是否空若栈空,则表明该“右括弧”多余 否则和栈顶元素比较,若相匹配,则“左括弧出栈” , 否则表明不匹配。 3)表达式检验结束时,若栈空,则表明表达式中匹配正确, 否则表明“左括弧”有余。 编程实现 内容安排 3.1 栈的类型定义 3.2 栈类型的实现 3.3 栈的应用举例 3.4 队列的类型定义 3.5 队列类型的实现 队列(Queue)的定义 队列:队列是一种只允许在表的一端插入,在另一端删除的存取受限的线性表。 概念: 队尾rear: 插入端,线性表的表尾。 队头front:删除端,线性表的表头 队列(Queue)图示 FIFO(First In First Out)(先进先出表) 队列举例 例如,在一个局域网上有一台共享的网络打印机,网上每个用户都可以将数据发送给网络打印机进行输出 为了保证不丢失数据,操作系统为网络的打印机生成一个作业队列“ 每个申请输出的“作业”应按先来后到的顺序排队 打印机从作业队列中逐个提取作业进行打印 队列的类型定义 队列的基本操作 内容安排 3.1 栈的类型定义 3.2 栈类型的实现 3.3 栈的应用举例 3.4 队列的类型定义 3.5 队列类型的实现 链队列——链式映象 循环队列——顺序映象 链队列——链式映象 用链表表示的队列简称为链队列。 为便于操作,一个链队列需要分别指示队头和队尾的两个指针 链队示意图 链队列的定义 InitQueue在链队列中的实现 EnQueue在链队列中的实现 DeQueue在链队列中的实现 循环队列——顺序映象 队列的顺序表示 约定队头指针指向队列头元素,队尾指针指向队尾元素的下一个位置 循环队列 循环队列操作示意图 循环队列的状态问题 空队列条件: Q.rear = Q.front; 满队列条件: Q.rear = Q.front; InitQueue在循环队列中的实现 求队中元素个数 int SeQueueLength(SeQueue Q) {∥返回队列Q的元素个数 return (Q.rear- Q.front+MAXSIZE)%MAXSIZE; } EnQueue在循环队列中的实现 DeQueue在双链表中的实现 本章学习要点 1. 掌握栈和队列类型的特点,并能在相应的应用问题中正确选用它们。 2. 熟练掌握栈类型的两种实现方法,特别应注意栈满和栈空的条件以及它们的描述方法 3. 熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的描述方法。 问题:如何区别队空和队满 有三种方法

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档