- 1、本文档共60页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 栈和队列 栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性DS 3.1 栈(stack) 3.1.1 栈的定义和特点 3.1.2 栈的表示和实现 3.1.3 栈应用 3.1.1 栈的定义和特点 定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈 特点:先进后出(FILO)或后进先出(LIFO) 3.1.2 栈的表示和实现 顺序栈:用一维数组实现 3.1.2 栈的表示和实现 链栈:用链表实现栈功能 3.1.2 栈的表示和实现 3.1.3 栈的应用 数制转换 回文游戏 括号匹配检验 表达式求值 数字转换 回文游戏 表达式求值(限于二元运算符的表达式定义) 表达式 ::= (操作数) + (运算符) + (操作数) 操作数 ::= 简单变量 | 表达式 简单变量 :: = 标识符 | 无符号整数 表达式的三种标识方法: 例如: Exp = a ? b + (c ? d / e) ? f 前缀式: + ? a b ? ? c / d e f 中缀式: a ? b + c ? d / e ? f 后缀式: a b ? c d e / ? f ? + 前缀式的运算规则为: Exp = a ? b + (c ? d / e) ? f 前缀式: + ? a b ? ? c / d e f 连续出现的两个操作数和在它们之前且紧靠它们的运算符构成一个最小表达式; 如何从后缀式求值? 如何从原表达式求得后缀式? 从常规表达式求得后缀式的步骤 为操作符设一个栈S; 设常规表达式的结束符为“#”, 予设栈S的栈底为“#”; Ch=getchar(),表示从常规表达式取得的当前字符 若ch操作数,则直接发送给后缀式。 若ch是操作符,将其与栈顶操作符比较: 如果ch的优先级高于栈顶运算符优先级,ch进栈; 如果ch的优先级低于栈顶运算符优先级,栈顶操作符出栈,并送往后缀式; 如果 ch的优先级等于栈顶运算符优先级,视情况作不同的处理 操作符优先级关系表 //比较操作符ch1与ch2的优先级 char express::comp(char ch1,char ch2) { int i,j; char *opr[]={ , , , , =s, s, s= }; i=getindex(ch1); j=getindex(ch2); return opr[i][j]; } 3.1.4 栈与递归 3.2 队列 3.2.1 队列的定义及特点 3.2.2 队列的链式存储-链队列 3.2.3 队列的顺序存储-循环队列 3.2.4 队列的应用 3.2.1 队列的定义及特点 定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表 队尾(rear)——允许插入的一端 队头(front)——允许删除的一端 队列特点:先进先出(FIFO) 3.4.2 队列的链存储-链队列 3.4.2 队列的链存储-链队列 //循环链表 templateclass T class Clist { protected: CnodeT *last; int num; public: Clist(){ last=new CnodeT; last-next=last; num=0; }; Clist(const ClistT L); ~Clist() {del_all(); }; bool empty(){ return last-next==last; }; int length(){ return num;} CnodeT* locate(T e); void copy(const ClistT L); void ins_front(T e); void ins_back(T e); void ins_sort(T e); bool del_front(T e); void del_all(); }; 3.4.3 队列的顺序存储结构 存在问题 设数组维数为M,则: 当front=0,rear=M-1时,再有元素入队发生溢出——真溢出 当front?0,rear=M-1时,再有元素入队发生溢出——假溢出 解决方案 队首固定,每次出队时,剩余元素向队头移动——浪费时间 循环队列 循环队列 基本思想:把队列设想成环形,让sq[0]接在sq[M-1]之后,若rear+1==M,则令rear=0 入队算法 出队算法 3.3.4
您可能关注的文档
- 33届国际楚才第十二讲 让细节描写在楚才作文中闪光.pptx
- 38. 安全文明施工知识.ppt
- 自动化系统施工方案.doc
- 3C 汽车内饰 生产一致性控制计划.doc
- 39110工作面供电排水设计8.17.doc
- 腰痛的诊断与鉴别诊断LB.ppt
- 3C认证产品认证获证后企业须知(第二版).doc
- 自动变速器复习题及答案.docx
- 3700A培训教材.pptx
- 自动原理实验.doc
- 上海海洋大学《海洋环境分析技术》课件-21化学发光分析法.pdf
- 上海海洋大学《海洋环境分析技术》课件-20分子荧光分析法.pdf
- 上海海洋大学《海洋环境分析技术》课件-22色谱分离过程.pdf
- 上海海洋大学《海洋环境分析技术》课件-25气相色谱仪与固定液.pdf
- 上海海洋大学《海洋环境分析技术》课件-24色谱定性定量方法.pdf
- 上海海洋大学《海洋环境分析技术》课件-26气相色谱检测器.pdf
- 上海海洋大学《海洋环境分析技术》课件-29液相色谱固定相与流动相.pdf
- 上海海洋大学《海洋环境分析技术》课件-27气相色谱分离条件的选择.pdf
- 上海海洋大学《海洋环境分析技术》课件-28液相色谱仪器与类型.pdf
- 上海海洋大学《海洋环境分析技术》课件-3 原子光谱和分析光谱.pdf
文档评论(0)