在很多数据结构的经典教材中都提到了如何求解复杂表达式的问题,核心是堆栈的设计和算符优先级的设计。我用BCB6实现了这个问题,简单的谈一下我的思路。
Step-1:设计堆栈结构,双向链表。
Struct LinkingStack
{
String data;
LinkingStack *front; //前指针
LingkingStack *next; //后指针
}
Step-2:创建三个堆栈,字符串堆栈Base,算符堆栈=baseOS,操作数堆栈=baseNS
LinkingStack *Base=new LinkingStack;
LinkingStack *baseNS=new LinkingStack;
LinkingStack *baseOS=new LinkingStack;
设置游标指针:
Linking *p=Base;
Linking *NS=baseNS;
Linking *OS=baseOS;
Step-3:算法实现
3.1 算法的总体结构设计
3.2 对Block-1的程序描述
1)当出现第一种情况:不执行计算操作,只执行OS堆栈的退栈操作
# | ( | |
# | do | |
) | do |
if((y=="#" && x=="#")||(y=="(" && x==")"))
{
OS=OS->front;
OS->next=NULL;
goto flag1;
}
2)当出现第二种情