background image

C++数据结构学习:用栈做表达式求值

栈的应用很广泛,原书只讲解了表达式求值,那我也就只写这些。其实,栈的最大的

用途是解决回溯问题,这也包含了消解递归;而当你用栈解决回溯问题成了习惯的时候 ,

你就很少想到用递归了,比如迷宫求解。另外,人的习惯也是先入为主的,比如树的遍历,

从学的那天开始,就是递归算法,虽然书上也教了用栈实现的方法,但应用的时候,你

首先想到的还是递归;当然了,如果语言本身不支持递归(如 BASIC),那栈就是唯一

——

的选择了

好像现在的高级语言都是支持递归的。

 

   如下是表达式类的定义和实现,表达式可以是中缀表示也可以是后缀表示,用头节

点数据域里的 type 区分,这里有一点说明的是,由于单链表的赋值函数,我原来写的时

候没有复制头节点的内容,所以,要是在两个表达式之间赋值,头节点里存的信息就丢

了。你可以改写单链表的赋值函数来解决这个隐患,或者你根本不不在两个表达式之间赋

值也行。

 

   #ifndef Expression_H

 

   #define Expression_H

 

   #include "List.h"

 

   #include "Stack.h"

 

   #define INFIX 0

 

   #define POSTFIX 1

 

   #define OPND 4