编写程序,将表达式a+b*c-d/e转换成前缀表达式,输出。

提问:编写程序,将表达式a+b*c-d/e转换成前缀表达式,输出。

网友回答:

程序的话,你要告知你要用的语言的,以下是C++的参考(常见的数据结构)

#include #include using namespace std; #define STACK_INIT_SIZE 100 #define STACKINCREASE 10 typedef struct {    char *base;    char *top;    int stacksize; } SqStack; int InitStack(SqStack &S) {    S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));    if(!S.base)        {            cout<<"分配空间失败!";            exit(-1);        }    S.top=S.base;    S.stacksize=STACK_INIT_SIZE;    return 0; } int Push(SqStack &S,char e) {    if((S.top-S.base)>=STACK_INIT_SIZE)        {            S.base=(char *)realloc(S.base,(STACK_INIT_SIZE+STACKINCREASE)*sizeof(char));            if(!S.base)                {                    cout<<"分配空间失败!";                    exit(-1);                }            S.top=S.base+STACK_INIT_SIZE;            S.stacksize=STACK_INIT_SIZE+STACKINCREASE;        }    *(S.top)=e;//结构体    S.top++;    return 0; } int Pop(SqStack &S,char &e) {    if(S.base==S.top)        {            cout<<"栈为空!";            exit(0);        }    S.top--;    e=*(S.top);    return 0; } int GetTop(SqStack &S,char &e) {    if(S.base==S.top)        {            cout<<"栈为空!";            return 0;        }    else        {            e=*(S.top-1);            return 1;        } } int EmptyStack(SqStack &S) {    if(S.base==S.top) return 1;//stack is empty!    else return 0;//stack is not empty! } int Precede(char a,char b)//a为符号栈栈顶元素,b为待插入的元素 {    int i;//i=1入栈,i=0弹出操作符以及操作数进行计算    if((a=='+'||a=='-')&&(b=='*'||b=='/')) i=1;    if((a=='+'||a=='-')&&(b=='+'||b=='-')) i=0;    if((a=='*'||a=='/')&&(b=='*'||b=='/')) i=0;    if((a=='*'||a=='/')&&(b=='+'||b=='-')) i=0;    if(a=='('||a==')') i=1;    return i; } int Nifix_To_Prefix (const char *p) {    char a,c,d,e;    int i;    SqStack S,S1,S2;//S为操作符栈,S1为存储倒置后元素的栈,S2存储的是逆序的前缀表达式,最后依次弹出以实现最终的前缀表达式    InitStack(S);    InitStack(S1);    InitStack(S2);    //由于要从右到左依次读取表达式中的各个元素,所以这里利用一个栈S1将它们倒置    d='#';    Push(S1,d);    while(*p!='#')        {            d=*p;            Push(S1,d);            p++;            if(*p=='#') break;        }    Pop(S1,c);    cout<<"转换后的前缀表达式为:"<='a'&&c<='z')  Push(S2,c);//表达式只支持小写            if(c==')') Push(S,c); //输入为右括号            if(c=='(')//输入为左括号                {                    if(!EmptyStack(S)) GetTop(S,e);                    while(e!=')')                        {                            Pop(S,a);                            Push(S2,a);                            if(!EmptyStack(S)) GetTop(S,e);//直到遇到左括号                            if(e==')') Pop(S,e);                        }                }            if(c=='+'||c=='-'||c=='*'||c=='/')                {                    if(EmptyStack(S))  Push(S,c);                    else                        {                            GetTop(S,e);                            i=Precede(e,c);                            if(i==1) Push(S,c);                            if(i==0)                                {                                    while(!i)                                        {                                            Pop(S,a);                                            Push(S2,a);                                            if(!EmptyStack(S))                                                {                                                    GetTop(S,e);                                                    i=Precede(e,c);                                                }                                            else break;                                        }                                    Push(S,c);                                }                        }                }            Pop(S1,c);        }    if(!EmptyStack(S))        {            while(!EmptyStack(S))                {                    Pop(S,a);                    Push(S2,a);                }        }    while(!EmptyStack(S2))        {            Pop(S2,a);            cout<

结果为

相关推荐

编写程序将一个指定文件中给定字符串删除,假设给定的字符串长度不超过20文件中每行的字符数不超过100

编写程序将一个指定文件中给定字符串删除,假设给定的字符串长度不超过20文件中每行的字符数不超过100

13.编写程序,利用格式控制符将浮点数100.453627分别四舍五入到十分位、百分位、千分位、

13.编写程序,利用格式控制符将浮点数100.453627分别四舍五入到十分位、百分位、千分位、

编写程序输入10个整数,将第二大数放在倒数第二的位置上,并在屏幕上输出其值。

编写程序输入10个整数,将第二大数放在倒数第二的位置上,并在屏幕上输出其值。

编写程序,在单击窗体时完成以下计算并将结果显示在窗体上。要求从键盘任意输入 10 个数计算正数平均值

编写程序,在单击窗体时完成以下计算并将结果显示在窗体上。要求从键盘任意输入 10 个数计算正数平均值

编写程序,,,,,,,,,,

编写程序,,,,,,,,,,

编写程序利用函数调用求出用数字0至9可以组成多少个没有重复数字的两位偶数

编写程序利用函数调用求出用数字0至9可以组成多少个没有重复数字的两位偶数

编写程序,创建包含10个整数的数组,使用循环语句为数组赋值,输出其中最大值及对应的元素下标。

编写程序,创建包含10个整数的数组,使用循环语句为数组赋值,输出其中最大值及对应的元素下标。

编写程序: 1、 从键盘上输入任意两个实数,输出两个数中的最大数

编写程序: 1、 从键盘上输入任意两个实数,输出两个数中的最大数

编写程序输入一个整数打印,说他是奇数还是偶数

编写程序输入一个整数打印,说他是奇数还是偶数

编写程序找出1000之内的所有完数及这些完数的和。

编写程序找出1000之内的所有完数及这些完数的和。

编写程序通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后按行顺序每行5个数输出该数组

编写程序通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后按行顺序每行5个数输出该数组

编写程序:模仿游戏,设计一个英雄人物类,具有名称、生命值、攻击力、防护值、武器等属性及攻击方法;

编写程序:模仿游戏,设计一个英雄人物类,具有名称、生命值、攻击力、防护值、武器等属性及攻击方法;

编写程序,输出能被1-399之内能被3整除含有5的数,每行输出8个数字,并统计其个数

编写程序,输出能被1-399之内能被3整除含有5的数,每行输出8个数字,并统计其个数

编写程序。输入四个整数。求其前两个数中较小的数与后两个数中较大的数之和

编写程序。输入四个整数。求其前两个数中较小的数与后两个数中较大的数之和

编写程序,用户输入一个N*N的矩阵以及正整数m,对N*N的二维数组右上半三角元素的值乘以m

编写程序,用户输入一个N*N的矩阵以及正整数m,对N*N的二维数组右上半三角元素的值乘以m

盒子游戏,游戏玩家专属个性阅读社区


©CopyRight 2010- 2020 BOXUU.COM Inc All Rights Reserved

鄂公网安备 35020302000061号- 鄂ICP备2020015574号-1