逆波兰表达式学习日记(1)
来源:互联网 发布:win10没有网络协议 编辑:程序博客网 时间:2024/05/16 09:37
先看了一下栈的基本原理,也就是所谓的后进先出,然后就想完整的学习一下逆波兰表达式。下午刚上完工程制图(工程制图没认真听啊orz.....),回来就想着先写第一部分吧。
前面说了一堆废话,先给个例子
9+(3-1)×3+10/2 --------> 931-3*+102/+
将中缀表达式转化成后缀表达式,原理很简单,我先做一个关于没有“(”与“)”的例子,来简单的解释一下这个过程。
先贴代码:
//只对+-*/进行处理,不包含'(',')'的代码(本人菜得抠脚,所以....只能先写这个,而且对于数字之间也没有进行空格处理,第一个版本很粗糙啦)
char* change(char* m1)
{
int i,j;
i=j=0; //i和j分别表示m1与m2存放到的位置
char* m2=new char [100];
memset(m2,' ',sizeof(m2));
stack <char> t; //定义一个栈队列
while(m1[i]!='\0') //如果m1没有结束的话,就做循环
{
if(m1[i]>='0'&&m1[i]<='9') //1-9直接输出,没什么原理
{
m2[j++]=m1[i++];
}
else if(m1[i]=='+'||m1[i]=='-')//因为“+”和“-”是运算优先级最小的,所以栈队列内的所有符号都加入m2,再把当前的压进去
{
while(t.size()!=0)
{
m2[j++]=t.top();
t.pop();
}
t.push(m1[i++]);
}
else if(m1[i]=='*'||m1[i]=='/')//“*”和“/”属于运算级高的,所以如果遇到“+”,“-”,就压进去,同等级的就取出来
{
while(t.size()!=0)
{
if(t.top()=='+'||t.top()=='-')
{
break;
}
else
{
m2[j++]=t.top();
t.pop();
}
}
t.push(m1[i++]);
}
}
while(t.size()!=0) //最后把t队列里的全取出来
{
m2[j++]=t.top();
t.pop();
}
return m2;
}
//写了20分钟,改好了有括号功能的change函数了
代码2,因为思路和上面差不多,对照着看就可以看懂了
char* change(char* m1)
{
int i,j;
i=j=0;
char* m2=new char [10];
memset(m2,' ',sizeof(m2));
stack <char> t;
while(m1[i]!='\0')
{
if(m1[i]>='0'&&m1[i]<='9')
{
m2[j++]=m1[i++];
}
else if(m1[i]=='+'||m1[i]=='-')
{
while(t.size()!=0&&t.top()!='(')
{
m2[j++]=t.top();
t.pop();
}
t.push(m1[i++]);
}
else if(m1[i]=='*'||m1[i]=='/')
{
while(t.size()!=0&&t.top()!='(')
{
if(t.top()=='+'||t.top()=='-')
{
break;
}
else
{
m2[j++]=t.top();
t.pop();
}
}
t.push(m1[i++]);
}
else if(m1[i]=='(')
{
t.push(m1[i++]);
}
else if(m1[i]==')')
{
while(t.top()!='(')
{
m2[j++]=t.top();
t.pop();
}
if(t.top()=='(') t.pop();
i++;
}
}
while(t.size()!=0)
{
m2[j++]=t.top();
t.pop();
}
return m2;
}
ok,今天先写到这里吧,下回把后缀表达式的运算方法写成代码贴出来,好烦啊,去写实验报告以及工程制图作业去了
over
- 逆波兰表达式学习日记(1)
- 逆波兰表达式学习日记(2)
- 逆波兰表达式学习
- 波兰、逆波兰表达式
- 波兰表达式和逆波兰表达式(栈)
- 数据结构学习之栈-逆波兰表达式(一)
- +-*、()表达式转逆波兰
- 逆波兰表达式(递归)
- (递归)逆波兰表达式
- 算法学习一之逆波兰表达式
- 算法学习-逆波兰表达式RPN
- 算法学习之递归--逆波兰表达式
- 逆波兰表达式(后缀表达式)2
- 逆波兰表达式(后缀表达式)
- 求解逆波兰表达式(前缀表达式)
- 逆波兰表达式(前缀表达式)
- 后缀表达式(逆波兰表达式)
- 波兰表达式和逆波兰表达式
- Kmp算法的两种写法
- 我是个宅男,天天就想着美女---Android app>>Girl Style看过来
- java实现MD5数据加密
- 多线程例子
- 游戏网络编程非常好的资料
- 逆波兰表达式学习日记(1)
- FreeMind 画的TCPIP四层OSI七层协议
- DWR配置
- jquery 实现原理七:DOM遍历-tranversing
- 黑马javaSE内部编程题10道--第一道源码
- 简单包传输协议
- MythTV开源软件
- HTML特殊字符之編碼、解碼
- JFreeChat_02