数据结构——从中缀向后缀转换表达式

来源:互联网 发布:百度统计数据导出 php 编辑:程序博客网 时间:2024/05/22 00:10

第一次看题,实在没看懂,然后就去百度逆波兰表达式,结果百度百科里有把中缀表达式改为后缀表达式的算法

所以直接就写了出来

#include "stdio.h"#include "string.h"#include "stdlib.h"typedef struct stack{    char *base;    char *top;}stack;int pre(char sign){    switch (sign) {        case '+':        case '-':            return 1;            break;        case '*':        case '/':            return 2;            break;        case '^':            return 3;            break;        default:            return 0;            break;    }}int main(void){    stack sign;    int n,i;    char expre[100];    scanf("%d",&n);    while (n--) {        sign.base=(char*)malloc(100*sizeof(char));        sign.top=sign.base+1;        *sign.base='#';        scanf("%s",expre);        for (i=0; expre[i]!='#'; i++) {            if (expre[i]=='(') {                *sign.top++=expre[i];            }            else if(expre[i]==')'){                while (*(sign.top-1)!='(') {                    printf("%c",*(sign.top-1));                    sign.top--;                }                sign.top--;            }            else if (expre[i]=='+'||expre[i]=='-'||expre[i]=='*'||expre[i]=='/'||expre[i]=='^'){                while (((*(sign.top-1)==expre[i])&&(expre[i]=='^'))?(pre(*(sign.top-1))>pre(expre[i])):(pre(*(sign.top-1))>=pre(expre[i]))) {                    printf("%c",*(sign.top-1));                    sign.top--;                }                *sign.top++=expre[i];            }            else printf("%c",expre[i]);        }        while (sign.top!=sign.base+1) {            printf("%c",*(sign.top-1));            sign.top--;        }       printf("\n");    }    return 0;}

提交到网教后,最后一个案例WA了

看了几遍程序,没看出啥毛病,就也没管

后来才知道,a+b+c应该转为ab+c+;而a^b^c要转为abc^^

改了之后,就AC了

原创粉丝点击