永发信息网

数据结构 入门题目

答案:1  悬赏:20  手机版
解决时间 2021-07-17 19:48
  • 提问者网友:富士山上尢
  • 2021-07-17 13:51
利用堆栈将中缀表达式变为后缀表达式。将转换的步骤列表表示。

123 + 23*A/(C+5)
最佳答案
  • 五星知识达人网友:山河有幸埋战骨
  • 2021-07-17 15:04
这个不是用栈写的,用栈的太麻烦了,以前用栈写过一个不过代码找不到了

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

char* next;

void fail(char* s)
{
printf("match '%s' failed near '%c'.\n", s, *--next);
exit(0);
}

#define lbr() { if(*next++ == '(') ; else fail("("); }
#define rbr() { if(*next++ == ')') ; else fail(")"); }
void term();
void lv1();
void lv2();
void cal(char);

void expr()
{
term(); lv1();
}

void term()
{
double num = 0;
if(isdigit(*next)) {
do {
num = num * 10 + (*next - '0');
} while(isdigit(*++next));
printf("%g ", num);
} else if(isalpha(*next)) {
printf("%c ", *next++);
} else if(*next == '(') {
lbr(); expr(); rbr();
} else {
fail("term");
}
}

void lv1()
{
while(1) {
char c = *next;
if(c == '+' || c == '-') {
++next;
lv2(); printf("%c ", c);
} else if(*next == '*' || *next == '/') {
lv2();
} else {
break;
}
}
}

void lv2()
{
while(1) {
char c = *next;
if(c == '*' || c == '/') {
++next;
term(); printf("%c ", c);
} else if(isdigit(*next) || isalpha(*next)) {
term();
} else {
break;
}
}
}

void infix2postfix(char* s)
{
next = s;
expr();
putchar('\n');
}

int main()
{
infix2postfix("123+23*A/(C+5)");
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯