-
您现在的位置:网络学院 > 开发特区 > 开发语言 > C/C++
C++数据结构学习:用栈做表达式求值

出处:PConline
责任编辑:ljx

[03-10-30 10:18] 作者:happycock/CSDN
-
  栈的应用很广泛,原书只讲解了表达式求值,那我也就只写这些。其实,栈的最大的用途是解决回溯问题,这也包含了消解递归;而当你用栈解决回溯问题成了习惯的时候,你就很少想到用递归了,比如迷宫求解。另外,人的习惯也是先入为主的,比如树的遍历,从学的那天开始,就是递归算法,虽然书上也教了用栈实现的方法,但应用的时候,你首先想到的还是递归;当然了,如果语言本身不支持递归(如BASIC),那栈就是唯一的选择了——好像现在的高级语言都是支持递归的。

  如下是表达式类的定义和实现,表达式可以是中缀表示也可以是后缀表示,用头节点数据域里的type区分,这里有一点说明的是,由于单链表的赋值函数,我原来写的时候没有复制头节点的内容,所以,要是在两个表达式之间赋值,头节点里存的信息就丢了。你可以改写单链表的赋值函数来解决这个隐患,或者你根本不不在两个表达式之间赋值也行。

  #ifndef Expression_H

  #define Expression_H

  #include "List.h"

  #include "Stack.h"

  #define INFIX 0

  #define POSTFIX 1

  #define OPND 4

  #define OPTR 8

  template class ExpNode

  {

  public:

  int type;

  union { Type opnd; char optr;};

  ExpNode() : type(INFIX), optr('=') {}

  ExpNode(Type opnd) : type(OPND), opnd(opnd) {}

  ExpNode(char optr) : type(OPTR), optr(optr) {}

  };

ad
发给好友 投稿给我们 加入收藏 返回顶部

相关文章:
C++数据结构学习:栈和队列
C++对模板的分离式编译问题的解答
VC++实现拨号上网程序详解
利用C++Builder让软件字幕动起来
IT培训十大热门文章
·学好VC++的十大良好习惯
·传奇程序员:Perl的乐趣
·linux入门必读文章
·软件开发高手是这样炼成的
·在职读工程硕士考有变!
·追击热门IT认证:CCIE
·追击热门IT认证:RHCE
·获IT认证后薪水能涨多少?
·IT人必读的优秀书籍集锦
·中专生能进大型IT公司吗?

内容搜索 
高级搜索
本栏今日焦点