题目:https://pintia.cn/problem-sets/434/problems/5893
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
输入格式:
输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。
输出格式:
在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。
**输入样例:
2+3*(7-4)+8/4
输出样例:
2 3 7 4 - * + 8 4 / +
代码:嵌套括号的测试用例返回“运行时错误”,无能为力了,这时候感觉好无助,好绝望!
‘#’压在栈底,赋最低优先级,作栈空标志。
#include <stdio.h>
#include <stdlib.h>
#define MAX_SEQ_LEN 20
#define ERROR '!'
typedef char ElemType;
typedef enum{false, true} bool;
typedef struct{
ElemType *data; /*顺序栈*/
int top;
int size;
}SNode, *Stack;
bool InitStack(Stack S){
S->data = (ElemType *)malloc(MAX_SEQ_LEN*sizeof(ElemType));
S->top = 0;
S->size = MAX_SEQ_LEN;
if(S->data!=NULL)
return true;
else
return false;
}
bool Push(Stack S, ElemType e){
if(S->top==S->size){
printf("ERROR: fail to push!");
return false;
}
else{
S->data[S->top++] = e;
return true;
}
}
ElemType Pop(Stack S){
if(S->top==0</