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

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

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。

Input

输入一个算术表达式,以‘#’字符作为结束标志。

Output

输出该表达式转换所得到的后缀式。

Sample Input

a*b+(c-d/e)*f#

Sample Output

ab*cde/-f*+
#include 
using namespace std;
typedef char ElemType;
typedef struct
{
    ElemType *Base;
    ElemType *Top;
}Sl;

void InitStack(Sl &S)
{
    S.Base = new char[1010];
    S.Top = S.Base;
}
void Push(Sl &S,char e)
{
    *S.Top++ = e;
}
int EmptyStack(Sl &S)
{
    if(S.Top == S.Base)return 1;
    else return 0;
}
char Pop(Sl &S)
{
    char e;
   if(S.Top == S.Base)return 0;
   else
   {
    S.Top--;
    e = *S.Top;
   }
   return e;
}
char GetTop(Sl &S)
{
    char e;
    e = *(S.Top - 1);
    return e;
}

int main()
{
    char a;
   Sl S;
   InitStack(S);
   while(~scanf("%c",&a)&&a != '#')
   {
      if(a >= 'a' && a <= 'z')
      {
          printf("%c",a);
      }
      else if(a == '(')
      {
          Push(S,a);
      }
      else if(a == ')')
      {
          while(GetTop(S) != '(')
          {
              printf("%c",Pop(S));
          }
          Pop(S);
      }
      else if(a == '+' || a == '-')
      {
          if(!EmptyStack(S) && GetTop(S) != '(')
          {
              printf("%c",Pop(S));
          }
          Push(S, a);
      }
      else if(a == '*' || a == '/' || a == '%')
      {
          if(EmptyStack(S) || (GetTop(S) != '*' || GetTop(S) != '%' || GetTop(S) != '/'))
          {
              Push(S,a);
          }
          else
          {
              printf("%c",Pop(S));
              Push(S,a);
          }
      }
   }
   while(!EmptyStack(S))
   {
       printf("%c",Pop(S));
   }
    return 0;
}

 

你可能感兴趣的:(队,堆栈,数据结构)