数据结构-chapter3栈和队列.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 栈(Stack)和队列(Queue);第3章 栈(Stack)和队列(Queue) ;一、栈的定义 ;二、栈的抽象数据类型 ;栈的基本操作 ;栈的基本操作 ;栈的基本操作 ;三、栈的基本操作举例 ;四、栈的顺序表示和实现;四、栈的顺序表示和实现;初始化操作的实现算法;栈基本操作的实现;if(S.top-S.base=S.stacksize){ S.base=(ElemType*)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(ElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } //详见P47算法;栈基本操作的实现;栈基本操作的实现;四、栈的顺序表示和实现;五、栈的链式表示和实现;五、栈的链式表示和实现;五、栈的链式表示和实现;五、栈的链式表示和实现;3.2 栈的应用举例;3.2 栈的应用举例;3.2 栈的应用举例;void Match() { LinkStack S; InitStack(S); char str[100]; scanf(“%s”,str); for( i=0; str[i]!=‘\0’; i++ ) switch( str[i] ){ case ‘(‘: case ‘[‘: push(S,str[i]); break; case ‘)’: GetTop(S,x); if(x == ‘(’ ) Pop(S,y); else { printf(“Error”); exit(0);} break; case ‘]’: GetTop(S,x); if( x==‘[’) Pop(S,y); else { printf(“Error”); exit(0);} } if(StackEmpty(S))printf(“Success”); else printf(“Error”); }; 1.表达式的构成 任一表达式都可看成是由操作数,运算符和界限符组成的一个串。其中,操作数可以是常数也可以是变量或常量的标识符,运算符可以是算术运算符,关系运算符和逻辑运算符等,界限符包括左右括号和表达式结束符等,例表达式7+4*(8-3)。为论述方便,这里仅介绍简单算术表达式的求值问题。; 2. 算符的优先关系 要对表达式正确求值,必须正确的解释表达式,将其翻译成正确的机器指令序列。例如,要对表达式3*(7-2)求值,首先要了解算术运算的规则。即 1)从左到右; 2)先括号内,后括号外; 3)先乘除,后加减; 故,该表达式的计算步骤应为3*(7-2)=3*5=15。;; 表中空白表示运算符p1,p2不可能相遇的情况,若相遇则表明出现了语法错误。“#”是表达式的结束符,为算法方便在表达式的左边也虚设一个“#”使其配对。这样,当“(”=“)”时表示左右括号相遇,括号内运算已经结束;同理,当“#”=“#”时表示整个表达式求值完毕。; 3.算法思路 使用两个栈S1和S2, 其中,S1为运算符栈,用以寄存运算符,而S2为操作数栈,用以寄存操作数或运算结果。其算法思路如下, 1)首先设置两栈为空,将“#”作为表达式起始符压入运算符栈S1作为栈底元素;; 2)依次读入表达式的每个字符,若是操作数则进入操作数栈S2;若是运算符,则与S1的栈顶运算符比较优先级,若栈顶运算符优先级低,则进入栈S1,若栈顶运算符优先级高,则弹出S1的栈顶运算符,并从栈S2中弹出两个操作数,作相应运算后,将结果压入操作数栈S2,然后再次与S1的栈顶运算符比较优先级,直至栈顶运算符优先级低为止 3)当S1的栈顶运算符为“#”时,表达式求值结束,操作数栈S2中的数即为表达式的值。;表3.2求表达式3*(7-2)时的栈变化 ;4. C语言程序 file1 #define maxsize 30 typedef struct {char data[maxsize+1]; int top; } Stack; int Push(Stack S, char x) {if (S.top==maxsize) {printf(overflow\n); return(0);}

文档评论(0)

***** + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档