知识大全 数据结构考研分类复习真题 第三章 答案[8]

Posted 表达式

篇首语:天下之事常成于困约,而败于奢靡。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第三章 答案[8]相关的知识,希望对你有一定的参考价值。

   两栈共享一向量空间(一维数组) 栈底设在数组的两端 两栈顶相邻时为栈满 设共享数组为S[MAX] 则一个栈顶指针为 另一个栈顶指针为MAX时 栈为空

  用C写的入栈操作push(i x)如下   const  MAX=共享栈可能达到的最大容量  typedef   struct  node  elemtype  s[MAX]   int  top[ ]   anode   anode ds;  int push(int i elemtype x)  //ds为容量有MAX个类型为elemtype的元素的一维数组 由两个栈共享其空间 i的值为 或 x为类型为elemtype的元素 本算法将x压入栈中 如压栈成功 返回 否则 返回   if(ds top[ ] ds top[ ]== )printf( 栈满\\n ) return( )   switch(i)  case  ds s[++ds top[i]]=x break   case  ds s[ ds top[i]]=x   return( ) //入栈成功   

   本程序段查找栈S中有无整数为k的元素 如有 则删除 采用的办法使用另一个栈T 在S栈元素退栈时 若退栈元素不是整数k 则压入T栈 遇整数k k不入T栈 然后将T栈元素全部退栈 并依次压入栈S中 实现了在S中删除整数k的目的 若S中无整数k 则在S退成空栈后 再将T栈元素退栈 并依次压入S栈 直至T栈空 这后一种情况下S栈内容操作前后不变

   中缀表达式 ( + )*( / )的后缀表达式是     +     / *

  栈的变化过程图略(请参见 题) 表达式生成过程为

  中缀表达式exp 转为后缀表达式exp 的规则如下

  设操作符栈s 初始为空栈后 压入优先级最低的操作符 # 对中缀表达式从左向右扫描 遇操作数 直接写入exp 若是操作符(记为w) 分如下情况处理 直至表达式exp 扫描完毕

  ( )w为一般操作符( + * / 等) 要与栈顶操作符比较优先级 若w优先级高于栈顶操作符 则入栈 否则 栈顶运算符退栈到exp w再与新栈顶操作符作上述比较处理 直至w入栈

  ( )w为左括号( ( ) w入栈

  ( )w为右括号( ) ) 操作符栈退栈并进入exp 直到碰到左括号为止 左括号退栈(不能进入exp ) 右括号也丢掉 达到exp 中消除括号的目的

  ( )w为 # 表示中缀表达式exp 结束 操作符栈退栈到exp 直至碰到 # 退栈 整个操作结束

  这里 再介绍一种简单方法 中缀表达式转为后缀表达式有三步 首先 将中缀表达式中所有的子表达式按计算规则用嵌套括号括起来 接着 顺序将每对括号中的运算符移到相应括号的后面 最后 删除所有括号

  例如 将中缀表达式 ( + )*( / )转为后缀表达式 按如上步骤

  执行完上面第一步后为 ( (( + )*( ( / ))))

  执行完上面第二步后为 ( (( )+( ( )/) )*)

  执行完上面第三步后为 + / *  

  可用类似方法将中缀表达式转为前缀表达式

cha138/Article/program/sjjg/201311/22716

相关参考