2132 数据结构实验之栈二:一般算术表达式转换成后缀式

来源:互联网 发布:pokemon狙击软件 编辑:程序博客网 时间:2024/06/12 19:43

数据结构实验之栈二:一般算术表达式转换成后缀式

#include<cstdlib>  #include<iostream>  #include<cstdio>  #define stacknum 11111  #define stackmax  1111111  typedef char ET;  typedef struct  {      ET *top;      ET *base;      int stacksize;  }stack;  int CreatStack(stack &s)  {     s.base=(ET*)malloc(stackmax*sizeof(ET));     if(!s.base)   exit(0);     s.top=s.base;     s.stacksize=stackmax;     return 1;  }  void push (stack &s,char e )  {      if(s.top-s.base>s.stacksize)      {          s.base=(ET*)malloc((stackmax+stacknum)*sizeof(ET));          if(!s.base)              exit(0);          s.top=s.base+s.stacksize;          s.stacksize+=stacknum;      }      *s.top++=e;  }  void pop(stack &s)  {      s.top--;      printf("%c",*s.top);  }  void choose(stack &s,char str[])   {       for(int i=0;str[i]!='#';i++)       {           if(str[i]>='a'&&str[i]<='z')              printf("%c",str[i]);           else if(str[i]=='*'||str[i]=='/')              push (s,str[i]);           else if (str[i]=='+'||str[i]=='-')           {                if(*(s.top-1)=='*'||*(s.top-1)=='/')                  pop(s);                push(s,str[i]);           }           else if(str[i]=='(')                push(s,str[i]);           else if(str[i]==')')           {               while (*(s.top-1)!='(')                          pop(s);               s.top--;           }       }       while (s.top!=s.base)          pop(s);       printf("\n");   }   int main()   {       stack s;       char str[stackmax];       gets(str);          CreatStack(s);          choose(s,str);          return 0;   }  
0 0
原创粉丝点击