您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 设计将中缀表达式转换为前缀表达式的算法
设计将中缀表达式转换为前缀表达式的算法1111)求输入串的逆序。2)检查输入的下一元素。3)假如是操作数,把它添加到输出串中。4)假如是闭括号,将它压栈。5)假如是运算符,则i)假如栈空,此运算符入栈。ii)假如栈顶是闭括号,此运算符入栈。iii)假如它的优先级高于或等于栈顶运算符,此运算符入栈。iv)否则,栈顶运算符出栈并添加到输出串中,重复步骤5。6)假如是开括号,栈中运算符逐个出栈并输出,直到遇到闭括号。闭括号出栈并丢弃。7)假如输入还未完毕,跳转到步骤2。8)假如输入完毕,栈中剩余的所有操作符出栈并加到输出串中。9)求输出串的逆序。*/#includeiostream#includestringusingnamespacestd;charstack[50];//定义顺序栈,其中第一个元素表示栈为空;inttop=0;//栈顶指针,为0表示栈为空;intlevel(charop)//判断运算符级别函数;其中*/的级别为2,+-的级别为1;{intlevel;switch(op){case'+':case'-':level=1;break;case'*':case'/':level=2;break;default:level=0;break;}returnlevel;}boolisOperator(charop)//判断输入串中的字符是不是操作符,如果是返回true{if(op=='+'||op=='-'||op=='*'||op=='/')returntrue;elsereturnfalse;}stringconvert(strings)//将一个中缀串转换为后缀串,{stringoutput=;//输出串for(inti=s.length()-1;i=0;)//1)求输入串的逆序。{if(s[i]=48&&s[i]=57)output=output+s[i];//3)假如是操作数,把它添加到输出串中。if(s[i]==')')//4)假如是闭括号,将它压栈。{top++;stack[top]=s[i];}while(isOperator(s[i]))//如果是运算符,执行算法(5)对应操作;{if(top==0||stack[top]==')'||level(s[i])=level(stack[top])){top++;stack[top]=s[i];break;}else{output=output+stack[top];top--;}}if(s[i]=='(')//6)假如是开括号,栈中运算符逐个出栈并输出,直到遇到闭括号。闭括号出栈并丢弃。{while(stack[top]!=')'){output=output+stack[top];top--;}top--;}i--;//7)假如输入还未完毕,跳转到步骤2。}while(top!=0)//8)假如输入完毕,栈中剩余的所有操作符出栈并加到输出串中。{output=output+stack[top];top--;}returnoutput;}intmain(){stringinput,output;cout请输入串:;cininput;output=convert(input);cout后缀串为:;for(inti=output.length()-1;i=0;i--)//9)求输出串的逆序。coutoutput[i];coutendl;return0;}
本文标题:设计将中缀表达式转换为前缀表达式的算法
链接地址:https://www.777doc.com/doc-5647545 .html