中缀表达
#include<stdio.h> #include<stdlib.h> #define OK 1 #define Error 0 typedef int Status; //ջ typedef struct StackNode { char a; struct StackNode *next; }StackNode,*LinkStack; Status IniStack(LinkStack &S) { S=NULL; return OK; } Status Isempty(LinkStack &S) { if(S!=NULL) return Error; return OK; } Status Push(LinkStack &S,char e) { LinkStack p; p=new StackNode; p->a=e; p->next=S; S=p; return OK; } Status Pop(LinkStack &S,char &e) { LinkStack p; if(S==NULL) return Error; e=S->a; p=S; S=S->next; free(p); return OK; } char GetTop(LinkStack S) { if(S!=NULL) return S->a; return Error; } int pp(char a) { if(a=='/'||a=='*') return 1; return 0; } int main() { char ass[400]; LinkStack Q; int i; char k; IniStack(Q); gets(ass); for(i=0;;i++) { if(ass[i]=='\0') break; else if(ass[i]>='A'&&ass[i]<='Z')//alp printf("%c",ass[i]); else if(ass[i]=='(')//Z Push(Q,ass[i]); else if(ass[i]==')')//Y { int l; for(l=0;;l++) { Pop(Q,k); if(k=='(') break; else printf("%c",k); } } else { if(Isempty(Q)==1) Push(Q,ass[i]); else { int j; for(j=0;;j++) { if(Isempty(Q)==0) { k=GetTop(Q); if(pp(ass[i])<=pp(k)&&k!='(') { Pop(Q,k); printf("%c",k); continue; } else { Push(Q,ass[i]); break; } } Push(Q,ass[i]); break; } } } } while(Isempty(Q)==0) { Pop(Q,k); printf("%c",k); } return 0; }