利用链栈将中缀表达式转化为后缀表达式,然后利用顺序栈进行扫描计算,返回结果
书上的代码
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #define size 50 5 using namespace std; 6 typedef struct node 7 { 8 char data; 9 struct node *next; 10 }*linkstack,stacknode; 11 typedef struct //操作数栈 12 { 13 float data[size]; 14 int top; 15 }opstack; 16 void initstack(linkstack *top) 17 { 18 *top=new stacknode; 19 (*top)->next=NULL; 20 } 21 bool isempty(linkstack top) 22 { 23 if(top->next==NULL) 24 return 1; 25 return 0; 26 } 27 void pushstack(linkstack top,char e) 28 { 29 linkstack p; 30 p=new stacknode; 31 p->data=e; 32 p->next=top->next; 33 top->next=p; 34 } 35 bool popstack(linkstack top,char *e) 36 { 37 if(isempty(top)==1) 38 return 0; 39 linkstack p; 40 p=top->next; 41 *e=p->data; 42 top->next=p->next; 43 return 1; 44 } 45 int getstack(linkstack top,char *e) 46 { 47 if(isempty(top)==1) 48 return 0; 49 linkstack p; 50 p=top->next; 51 *e=p->data; 52 return 1; 53 } 54 /********************关于栈的一些操作********************/ 55 void translate(char str[],char exp[])//扫描的元素优先级高于栈顶元素,则入栈,低于则将栈顶元素放置于后缀表达式中,其中)优先级最低 56 { 57 linkstack s; 58 char ch; 59 char e; 60 int i=0,j=0; 61 initstack(&s); 62 ch=str[i]; 63 i++; 64 while(ch!='