- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程的内容 第三章 栈和队列 3.1 栈(Stack) 3.2 队列(Queue) 1. 定义 栈的存储结构 顺序栈 实现:一维数组s[M] Q1:堆栈是什么?它与一般线性表有什么不同? Q2:顺序表和顺序栈的操作有何区别? Q3:什么叫“向上生成”的栈? “向下生成”又是何意? Q4:为什么要设计堆栈?它有什么独特用途? 例1一个栈的输入序列为1,2,3,若在入栈的过程中允许出栈,则可能得到的出栈序列是什么? 例2: 设依次进入一个栈的元素序列为c,a,b,d,则可得到出栈的元素序列是: A)a,b,c,d B)c,d,a,b C)b,c,d,a D)a,c,d,b 基本操作 顺序栈的入栈操作——例如用堆栈存放(A,B,C,D) 顺序栈出栈操作——例如从栈中取出‘B’ 链栈的入栈操作和出栈操作 栈的应用举例 例1、多进制输出: 回文游戏:顺读与逆读字符串一样(不含空格) 例3、表达式求值 限于二目运算符的表达式定义: 表达式::=(操作数)+(运算符)+(操作数) 操作数::=简单变量|表达式 如何从原表达式求后缀式?例如a*b+(c-d/e)*f后缀式(逆波兰式):ab × cde/-f ×+ 1)设立运算符栈; 2)设表达式的结束符为#,予设运算符栈的栈底为# 3)若当前字符是操作数,则直接发送给后缀式; 4)若当前运算符的优先数高于栈顶运算符,则进栈; 5)否则,退出栈顶运算符发送给后缀式; 6)“(”对它之前后的运算符起隔离作用,”)”可视为自相应左括弧开始的表达式结束标志 表达式求值过程----机内运算示意图 作业(3.29) 2、画出执行下列各行语句后各指针及链表的示意图 L=(LingList)malloc(sizeof(LNode));P=L; for(i=1;i=4;i++){ P-next=(LinkList)malloc(sizeof(LNode)); P-data=i*2-1; } P-next=NULL; for(i=4;i=1;i--;)Ins_LinkList(L,i+1,i*2); for(i=1;i=3,i--)Del_LinkList(L,i); 3.试将下列递归程序改写为非递归程序 Void test(int sum){ int x; scanf(x); if(x==0) sum=0; else {test(sum);sum+=x;} printf(sum); } 实验 栈的应用 1、判断一个数是否是回文数。 从原表达式求得后缀式的规律为: 表达式的起止符号 例3 编写算法,用栈实现表达式3*(7 – 2 )求值。 (表达式求值是栈应用的典型例子, 见P52 ) 注:本例采用 “算符优先法”。 一个算术表达式是由操作数(x,y,z…) 和 算符(* ,/, + ,-,(,),# )组成. 教材P53中表3.1给出了算符之间的优先级 专为计算机处理而设计的表! (1) 表达式求值必须满足算术四则运算规则: a. 从左算到右 b. 先乘除,后加减 c. 先括号内,后括号外 OPTR OPND INPUT # 3 *(7 – 2 )# top 3 top # * ( ←top 7 - 2 ←top 7-2 5 5*3 15 3元素退栈:2, -, 7; 计算: a, thata,b=7-2=5 将结果压入OPND栈 且运算符‘)’保留,继续与下一个栈顶元素比较! (2) 算法思想: 1)首先置操作数栈OPND为空栈,表达式的起始符#为运算符栈OPTR的栈底元素; 2)依次读入表达式中的每个字符, 若运算符是‘#’或栈顶是‘#’,结束计算,返回OPND栈顶值。 if(是操作数) → 则PUSH( OPND,操作数); if(是运算符) → 则与OPTR栈顶元素进行比较,按优先级(规定详见P53表3.1)进行操作; 为了实现算符优先算法,可以设定两个工作栈: OPND—存放操作数或运算结果, OPTR—存放运算符号。 3)直到整个表达式求值完毕(当前读入的字符和OPTR栈的栈顶元素均为# ) if栈顶元素输入算符,则算符压入OPTR栈,并接收下一字符 if栈顶元素=运算符但≠‘#’,则脱括号(弹出左括号)并收下一字; if栈顶元素运算符,则退栈、按栈顶计算,将结果压入OPND栈。 且该未入栈的运算符要保留,继续与下一个栈顶元素比较! 问:教材P53表3.1中,?1和?2哪个对应栈顶元素,哪个对应键盘输入值? 答:根据P53
您可能关注的文档
- 数据挖掘技术及应用(最全面理论+最佳实践)探讨.ppt
- 人教版小学三年级语文上册《语文园地一》探讨.ppt
- 数据挖掘的10大算法探讨.ppt
- 数据挖掘6聚类探讨.ppt
- 人教版小学二年级语文上册第6课《我选我》探讨.ppt
- 数据挖掘(偶然看到比较好的)探讨.ppt
- 人教版小学二年级上册语文第十四课我要的是葫芦探讨.ppt
- 设计吉祥物探讨.ppt
- 人教版小学二年级上册数学《厘米的认识》探讨.ppt
- 设计安全规范探讨.ppt
- 2025江苏事业单位联考职位表全表笔试模拟试题及答案解析.docx
- 2025山东菏泽国开中学美术教师招聘3人笔试备考试题及答案解析.docx
- 2025四川省西南医科大学附属医院招募医疗卫生服务辅助岗项目志愿者50人笔试模拟试题及答案解析.docx
- 2025江苏苏锡通科技产业园区江海街道政府购买岗位招聘10人笔试备考试题及答案解析.docx
- 2025年蚌埠市蚌山区高层次优秀教师公开招聘15人笔试模拟试题及答案解析.docx
- 2025四川省医学科技教育中心行政事业业务辅助岗招聘1人笔试备考试题及答案解析.docx
- 2025四川省产品质量监督检验检测院考核招聘6人笔试模拟试题及答案解析.docx
- 2025四川德阳市罗江区鄢家镇人民政府招聘临聘人员1人笔试备考试题及答案解析.docx
- 2025四川省档案学校招聘编制外工作人员11人笔试备考试题及答案解析.docx
- 河海大水工建筑物实验指导02水工结构静力模型实验.doc
文档评论(0)