算法与数据结构第三章栈和队列.ppt.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法与数据结构第三章栈和队列.ppt.ppt

第三章 栈和队列 3.1 栈 3.1.1 栈的定义 3.1.2 顺序栈及基本运算 3.1.3链栈及基本运算 3.2 栈的应用举例 3.2.1 数制转换 3.2.2 行编辑程序 3.2.3 表达式求值 3.4 队列 3.4.1 队列的定义 3.4.2 链队列 3.4.3 循环队列 行编辑程序算法如下: void lineedit( ){ initstack(s); ch=gether( ); while(ch!=eof){ //全文结束 while(ch!=eof ch!=‘\n’){ switch(ch){ case ‘#’ : c=pop(s); //退格符,删字符 case ‘@’ : clearstack(s);//退行符,清栈 default : push(s,ch);//有效符,进栈 } ch=getchar( ); } send(s,buffer);//栈s里的数据送缓冲区 clearstack(s);//输完一行后,清栈 if(ch!=eof) ch=gethar( ); } destroystack(s); } 3.2.3 表达式计算 程序设计中经常要用表达式进行求值,编译系统如何将它们处理成能够正确求值的指令序列,是语言处理程序要解决的一个基本问题,这里,我们仍可以用栈来解决。作为栈的典型应用,下面我们详细介绍表达式求解的具体过程。 对任意一个表达式,我们都可以将其分解成三个部分:操作数(oprand),操作符(operator),分界符(delimiter)。为了讨论方便,此处操作数一般用常数或已说明类型的变量;操作符仅限于+、-、*、/等算术运算符;分界符指左右括号和表达式。其它情况可在此基础上加以推广。 算法的基本思路是: 1.初始化操作数栈、操作符栈; 2.从左到右扫描表达式,顺次取出各字符;若当前所取字符为‘#’,且操作符的栈顶元素也为‘#’,则输出操作数栈中的栈顶数据,结束处理;否则,进行下面处理; 3.若为操作数,入操作数栈;若为操作符,则要将当前操作符和操作符栈中的栈顶操作符的优先级进行比较,如果 ⑴当前操作符的优先级大于栈顶操作符的优先级,则将当前操作符压入操作符栈中,转第2步; ⑵当前操作符的优先级等于栈顶操作符的优先级,则将当前操作符栈顶的操作符出栈,作脱括号运算,转第2步; ⑶当前操作符的优先级小于栈顶操作符的优先级,则将当前操作符栈顶的操作符出栈,接下来,从操作数栈中顺次出栈两个操作数,用刚出栈的操作符对两个操作数进行连接,并计算其值,将所求得的值压入回操作数栈中,转第3步。 具体算法描述如下: void Cal_Expression(Expression e) { Init_Stack(OPTR_S); //初始化操作符栈 Init_Stack(OPND_S); //初始化操作数栈 Push (OPTR_S ,’#’); ch=getchar(); while(ch!=’#’|| Stacktop(OPTR_S) !=’#’) {if (isdigit(ch)) //是操作数,入操作数栈 {Push (OPND_S ,ch); ch=getchar();} else {switch(Priority(ch,Stacktop(OPTR_S)) {case’’:{ Push (OPTR_S ,ch); ch=getchar(); break;} case’=’:{ Pop (OPTR_S); ch=getchar(); break;} case’’: { op=Stacktop(OPTR_S); Pop (OPTR_S); ch2= Stacktop(OPND_S); Pop (OPND_S); ch1= Stacktop(OPND_S); Pop (OPTR_S); Pus

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档