数据结构实验之栈与队列二:一般算术表达式转换成后缀式
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
Input
输入一个算术表达式,以‘#’字符作为结束标志。
Output
输出该表达式转换所得到的后缀式。
Sample Input
a*b+(c-d/e)*f#
Sample Output
ab*cde/-f*+
代码
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define Maxsize 2000
using namespace std;
typedef struct node
{
char *data;
int maxsize;
int top;
}stack;
void in(stack &s)
{
s.data = new char[Maxsize];
s.maxsize = Maxsize;
s.top = -1;
}
void push(stack &s, char k)
{
s.data[++s.top] = k;
}
void pop(stack &s)
{
s.top--;
}
int isempty(stack s)
{
return(s.top==-1);
}
char top(stack &s)
{
return s.data[s.top];
}
int main()
{
stack s;
in(s);
char ch;
while((ch = getchar())!='#')
{
switch(ch)
{
case ')':
while(1)
{
if(top(s) == '(')
{
pop(s);
break;
}
putchar(top(s));
pop(s);
}
break;
case '+':
case '-':
while(top(s) != '(' && !isempty(s))
{
putchar(top(s));
pop(s);
}
push(s, ch);
break;
case '*':
case '/':
case '(':
push(s, ch);
break;
default:
putchar(ch);
}
}
while(!isempty(s))
{
putchar(top(s));
pop(s);
}
cout<<endl;
return 0;
}