知识大全 数据结构考研分类复习真题 第六章 答案 (五)[3]

Posted 表达式

篇首语:古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第六章 答案 (五)[3]相关的知识,希望对你有一定的参考价值。

   .[题目分析]首先通过对二叉树后序遍历形成后缀表达式 这可通过全局变量的字符数组存放后缀表达式 接着对后缀表达式求值 借助于一栈存放运算结果 从左到右扫描后缀表达式 遇操作数就压入栈中 遇运算符就从栈中弹出两个操作数 作运算符要求的运算 并把运算结果压入栈中 如此下去 直到后缀表达式结束 这时栈中只有一个数 这就是表达式的值

  char ar[maxsize];//maxsize是后缀表达式所能达到的最大长度  int i= ;  void  PostOrder(BiTree  t )//后序遍历二叉树t 以得到后缀表达式  if(t)  PostOrder(t >lchild); PostOrder(b >rchild) ar[i++]=b >data;   //结束PostOrder  void  EXPVALUE()  //对二叉树表示的算术表达式 进行后缀表达式的求值  ar[i]= \\ ;      //给后缀表达式加上结束标记  char value[];      //存放操作数及部分运算结果  i= ; ch=ar[i++];  while(ch!= \\ )  switch(ch)  case ch in op: opnd =pop(value);opnd =pop(value); //处理运算符  push(operate(opnd ch opnd ));break;  default:       push(value ch);                    //处理操作数 压入栈中    ch=ar[i++];                  //读入后缀表达式   printf(value[ ]);            //栈中只剩下一个操作数 即运算结束    //结束EXPVALUE

  [算法讨论] 根据题意 操作数是单字母变量 存放运算结果的栈也用了字符数组 实际上 操作数既可能是变量 也可以是常量 运算中 两个操作数(opnd 和opnd )也不会直接运算 即两个操作数要从字符转换成数(如 是字符 而数值 = ) 数在压入字符栈也必须转换 算法中的operate也是一个需要编写的函数 可参见上面算法设计题 其细节不再深入讨论

cha138/Article/program/sjjg/201311/23733

相关参考

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[23]

  PROCprint(bt:BiTreexy:integer)  //将二叉树逆时针旋转度打印xy是根结点基准坐标调用时xy=  IFbt<>NILTHEN[print(bt↑rchil

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[19]

  intLevel(BiTreebt)//层次遍历二叉树并统计度为的结点的个数  intnum=;//num统计度为的结点的个数  if(bt)QueueInit(Q);QueueIn(Qbt)//

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[47]

  .BiThrTreeInSucc(BiThrTreeTp) //在对称序穿线树T中查找给定结点p的中序后继  if(p>rtag==)q=p>rchild; &nb

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[33]

  intBTLC(BiTreeTint*c)//对二叉树T的结点计数  if(T)  *c++;  BTLC(T>lchild&c);//统计左子树结点  BTLC(T>rchi

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[45]

  voidInOrderThreat(BiThrTreethrt)  //thrt是指向中序全线索化头结点的指针本算法中序遍历该二叉树  p=thrt>lchild; //p指向二叉

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[34]

  .intCount(BiTree bt)//非递归遍历求二叉树上的叶子结点个数  intnum=;  BiTrees[];//s是栈栈中元素是二叉树结点指针栈容量足够大  whlie(b

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[25]

  [题目分析]知二叉树中序序列与后序序列第题以递归算法建立了二叉树本题是非递归算法  voidInPostCreat(ElemTypeIN[]POST[]intlhlh)  //由二叉树的中序序列I

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[15]

  [题目分析]先序遍历二叉树的非递归算法要求进栈元素少意味着空指针不进栈  voidPreOrder(Bitree bt)//对二叉数bt进行非递归遍历  inttop=;Bitrees[

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[6]

  .BiTreeCreat(ElemTypeA[]inti)  //n个结点的完全二叉树存于一维数组A中本算法据此建立以二叉链表表示的完全二叉树  BiTreetree;  if(i<=n)t

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[4]

  .[题目分析]当森林(树)以孩子兄弟表示法存储时若结点没有孩子(fch=null)则它必是叶子总的叶子结点个数是孩子子树(fch)上的叶子数和兄弟(nsib)子树上叶结点个数之和  typedef