- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
重点:栈和队列的基本特征,表示与实现 难点:递归、循环队列 第三章 栈和队列 第三章 栈和队列 3.1 栈 3.2 栈的应用举例 3.3 栈与递归的实现 3.4 队列 3.5 离散事件模拟 作业 3.1 栈 定义 特殊的线性表:操作受限的线性表 是限定仅在表尾进行插入或删除操作的线性表 允许插入,删除的一端称为栈顶(top),另一端称为栈底(bottom) 逻辑特征 后进先出(LIFO) ADT Stack 初始化空栈、入栈、出栈 判断栈空、判断栈满 取栈顶 top bottom 进栈 出栈 an . . . . a1 3.1 栈–顺序栈的表示与实现 顺序栈 约定与类型定义:top的含义 基本操作的实现 base 空栈 a 进栈 b 进栈 a top base top base top a b 约定:top指向栈顶元素的下一个位置 3.1 栈–顺序栈的表示与实现 base e 进栈 f 进栈溢出 e出栈 edcba top base top base top 约定:top指向栈顶元素的下一个位置 edcba 顺序栈 dcba 3.1 栈–链栈的表示与实现 约定:top指向栈顶元素所在的结点 链栈 无栈满问题(除非分配不出内存), 空间可扩充 栈顶----链表的表头 可以不必引入头结点 N ^ top 3.2 栈的应用举例 数制转换 演示 括号匹配的检验 行编辑程序 迷宫求解 表达式求值 3.4 队列 定义 特殊的线性表:操作受限的线性表 只允许在一端进行插入,而在另一端删除元素 允许插入的一端为队尾(rear),允许删除的一端为队头(head) 双端队列:限定插入和删除操作在表的两端进行 逻辑特征:先进先出(FIFO) ADT Queue:初始化空队、入队、出队、判断队空、判断队满、取队头 队头 入队 出队 a1 a2 a3 … … an 队尾 3.4 队列–链队列的表示与实现 链队列 约定与类型定义:Q.front和Q.rear的含义 基本操作的实现 无队满问题(除非分配不出内存), 空间可扩充 引入头结点(一定需要吗?) top a1 a2 an ^ Q.front Q.rear 3.4 队列–循环队列 循环队列 队列的顺序存储 约定与类型定义:Q.front和Q.rear的含义 删除:避免大量的移动-头指针增1 问题:假上溢?首尾相接的环(钟) 队头 Q.front 入队 出队 a1 a2 a3 … … an Q.rear 队尾 3.4 队列–循环队列 循环队列 约定:Q.front和Q.rear(队尾的下一个)的含义 队空:Q.front==Q.rear 队满:Q.front==Q.rear 0 1 7 2 3 4 5 6 Q.front Q.rear 0 1 7 2 3 4 5 6 Q.front Q.rear a1 a2 a3 a4 a5 0 1 7 2 3 4 5 6 Q.front Q.rear a1 a2 a3 a4 a5 a6 a7 a8 如何区分队空和队满? 3.4 队列–循环队列 区分队空和队满的方法 设标志位(上次的更新动作):0-创建/删除,1-插入 引入队列长度 少用一个元素空间:插入前判断 Q.front==(Q.rear+1)%MAXQSIZE 0 1 7 2 3 4 5 6 Q.front Q.rear 0 1 7 2 3 4 5 6 Q.front Q.rear a1 a2 a3 a4 a5 a6 a7 有维护的代价 3.4 队列–循环队列 难点连续的存储单元的上下界:[d1,d2] 初始化空队:Q.front = Q.rear = d1; 队空: Q.front==Q.rear 队满: Q.front==(Q.rear-d1+1)%(d2-d1+1)+d1 入队: 前提:队列不满 Q.base[Q.rear] = e; Q.rear = (Q.rear-d1+1)%(d2-d1+1)+d1; 出队:前提:队列不空 e = Q.base[Q.front]; Q.front = (Q. front-d1+1)%(d2-d1+1)+d1 3.3 栈与递归的实现 递归的定义 递归的对象:一个对象部分地包含它自己,或用它自己给自己定义。如树的定义 递归的过程:一个过程直接或间接地调用自己 递归的应用 定义(阶乘)、数据结构(表)、问题求解(Hanoi塔) 3.3 栈与递归的实现–阶乘函数 定义是递归的 求解阶乘函数的递归算法 long fact ( long n ) { if ( n == 0 ) return 1; //递归结束条件 else return n * fact (n-
您可能关注的文档
最近下载
- 西南18J112 墙标准图集.pdf VIP
- 2025-2026学年高一上学期《树立正确三观:从庞众望的成长看青春担当》主题班会课件.pptx
- 北京市海淀区2024~2025学年七年级上学期期中考试数学试卷.docx
- 2025电力数据资产管理体系白皮书.docx VIP
- 《运动神经元病》课件.pptx VIP
- 肾上腺皮质腺瘤护理查房.pptx VIP
- 药物制剂生产实训(初级)课件 2-2 PPT:人员卫生管理.pptx
- 三年(2023-2025)中考历史真题分类汇编:专题07 统一多民族国家的巩固与发展·选择题(全国通用)(解析版).docx VIP
- 环境工程原理课件.pptx VIP
- 5_1_名雅化工不饱和聚脂树脂腻子(原子灰)MSDS.docx VIP
文档评论(0)