qt中缀转后缀算法(用栈)(新手 欢迎指点错误)
来源:互联网 发布:保险网络大学考试官网 编辑:程序博客网 时间:2024/06/05 22:25
中缀就是我们常见的一些的数学式子,比如:3+4,(3+4)*4+1,等。
而后缀是计算机计算比较好用的一个方式。比如:34+,
qt我们可以先创建一个项目。
首先我们要建栈,栈是比较好建的。
#define max 100
typedef char data;
typedef struct{
//int max=10;
char a[10];//你可自己定义大小,这里方便处理,定义10。
int top;
}slist_stack;
建完栈然后要处理栈,更新:
slist_stack *l;//后面都用l;
l->top=0;
删除://栈是先进后出行,操作都在栈顶,也就是top;
if(l->top==0)
{
qDebug()<<"无数据!";
return -1;
}
else
{
l->top-=1;
return 1;
}
增添:if(l->top==10)//刚刚定义了数据大小为10;
{
qDebug()<<"栈已满!";
return -1;
}
else
{
l->a[l->top]=data;//data你要插入的数据;
l->top++;
return 1;
}
做完这些,我们可以去写转化的函数转化的要求:(我自己总结的话语,有点毛糙,但容易理解)注:这里没有考虑小数,小数的话就是小数点后面数除以10,100,1000等等。
//1:如果是(则直接进栈,若为数字直接输出,
//2:如果是+-*/,则判定栈定的元素优先级是否比现在的符号优先级高,若低,栈输出,低的进栈。否则进栈
//3:如果是),是栈中的(之前的所有的符号出栈;
reset(l);//重置栈就是更新,我把它写到函数里了
int j=0,i=0;char f[20];//存放后缀表达式的数组(大小可以定以)while(c[i]!='#')//c[]数组存放的是中缀表达式,以#结尾。(当然也可以不用,可以用数组的大小){
if(c[i]=='(')//符号进栈{
l->a[l->top]=c[i];//进栈的操作l->top++;qDebug()<<"栈的符号数为:"<<l->top;//来调试栈的符号数}
else if(c[i]>=48&&c[i]<=57)//0到9的的ascii码,数字输出{
f[j++]=c[i];//数字输出到数组里
}
else if(c[i]=='+'||c[i]=='-')//+,-,优先级低于*,/{
if(l->a[l->top-1]=='('||l->a[l->top-1]=='+'||l->a[l->top-1]=='-')//若栈顶的符号优先级不高等进栈{
l->a[l->top]=c[i];l->top++;qDebug()<<"栈的符号数为:"<<l->top;}
else//否则则输出栈顶的元素,且出栈,然后把从c[i](低级的符号)进栈{
f[j++]=l->a[l->top-1];l->top=l->top-1;l->a[l->top]=c[i];l->top++;qDebug()<<"栈的符号数为:"<<l->top;}
}
else if(c[i]=='*'||c[i]=='/')//直接进栈,因为你其优先级最高{
l->a[l->top]=c[i];l->top++;qDebug()<<"栈的符号数为:"<<l->top;}
else if(c[i]==')')//碰到右括号时,吧栈左括号前面的全部输出{
while(l->a[l->top-1]!='('){
f[j++]=l->a[l->top-1];l->top=l->top-1;}
l->top=l->top-1;qDebug()<<"栈的符号数为:"<<l->top;}
i++;
}
while(l->top!=0)//判定栈是否为空,不为则直接输出.{
f[j++]=l->a[l->top-1];del(l);
}
QString a;for(int i1=0;i1<j;i1++)//这个可有可无 我是用来查看的,可能多此一举了{
a+=f[i1];
}
f[j++]='#';qDebug()<<a;//转化完成了
阅读全文
4 0
- qt中缀转后缀算法(用栈)(新手 欢迎指点错误)
- qt 计算器实现(中缀转后缀,后缀计算)
- 中缀表达式算法实现&中缀表达式转后缀表达式
- 【WEISS算法书】中缀转后缀
- 1、后缀表达式,以及中缀转后缀算法的思考
- 中缀转后缀&后缀求值
- c 中缀转后缀
- 中缀转后缀
- 中缀转后缀表达式
- 中缀转后缀
- 中缀转后缀
- 中缀转后缀求值
- 表达式中缀转后缀
- Nyoj467【中缀转后缀】
- 中缀转后缀
- 中缀转后缀
- 中缀转后缀
- 中缀转后缀
- thinkphp5.0部署在nginx服务器的一些疑难杂症
- 10.0.2.15ip地址——VirtualBox安装Lunix系统ip地址的问题
- Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析
- #1045
- Mac下Android Studio的下载与安装
- qt中缀转后缀算法(用栈)(新手 欢迎指点错误)
- centos6.7环境上源码安装mysql5.6
- 模式与原则
- 【已解决】Object of type 'range' is not JSON serializable
- 九宫重排--蓝桥杯国赛历年真题
- Selenium之常见元素处理系列四--下拉框Select
- 浏览器的多线程理解
- 如何使用Docker、Docker-Compose和Rancher搭建部署Pipeline(四)
- Codeforce#430D.Vitya and Strange Lesson(01Trie)