C语言中缀表达式转后缀表达式并利用后缀表达式求值 (小于10)
2017-07-20 20:47
369 查看
#include<stdio.h>
#include<stdlib.h>
int precedence(char c)
{
if(c=='*'||c=='/')
return
2;
if(c=='+'||c=='-')
return
1;
return
0;
}
int main()
{
char stack1[1000];
int top_index1=-1;
char stack2[1000];
int top_index2=-1;
char c;
while(1)
{
scanf("%c",&c);
if(c=='\n')
break;
else
if(c>='0'&&c<='9')
{
top_index2++;
stack2[top_index2]=c;
}
else
if(c=='(')
{
top_index1++;
stack1[top_index1]=c;
}
else
if(c==')')
{
while(stack1[top_index1]!='(')
{
top_index2++;
stack2[top_index2]=stack1[top_index1];
top_index1--;
}
top_index1--;
}
else
if(c=='+'||c=='-'||c=='*'||c=='/')
{
if(top_index1==-1||precedence(c)>precedence(stack1[top_index1]))
{
top_index1++;
stack1[top_index1]=c;
}
else
{
while(top_index1>=0&&precedence(stack1[top_index1])>=precedence(c))
{
top_index2++;
stack2[top_index2]=stack1[top_index1];
top_index1--;
}
top_index1++;
stack1[top_index1]=c;
}
}
}
while(top_index1!=-1)
{
top_index2++;
stack2[top_index2]=stack1[top_index1];
top_index1--;
}
// printf("%s\n",stack2); printf("%d\n",top_index2);
int stack3[1000];
int top_index3=-1;
for(int i=0;i<=top_index2;i++)
{
if(stack2[i]>='0'&&stack2[i]<='9')
{
top_index3++;
stack3[top_index3]=stack2[i]-48;
continue;
}
else
{
if(stack2[i]=='+')
{
int t1=stack3[top_index3];
int t2=stack3[top_index3-1];
top_index3--;
stack3[top_index3]=t1+t2;
}
if(stack2[i]=='-')
{
int t1=stack3[top_index3];
int t2=stack3[top_index3-1];
top_index3--;
stack3[top_index3]=t2-t1;
}
if(stack2[i]=='*')
{
int t1=stack3[top_index3];
int t2=stack3[top_index3-1];
top_index3--;
stack3[top_index3]=t1*t2;
}
if(stack2[i]=='/')
{
int t1=stack3[top_index3];
int t2=stack3[top_index3-1];
top_index3--;
stack3[top_index3]=t2/t1;
}
}
}
printf("%d",stack3[0]);
}
#include<stdlib.h>
int precedence(char c)
{
if(c=='*'||c=='/')
return
2;
if(c=='+'||c=='-')
return
1;
return
0;
}
int main()
{
char stack1[1000];
int top_index1=-1;
char stack2[1000];
int top_index2=-1;
char c;
while(1)
{
scanf("%c",&c);
if(c=='\n')
break;
else
if(c>='0'&&c<='9')
{
top_index2++;
stack2[top_index2]=c;
}
else
if(c=='(')
{
top_index1++;
stack1[top_index1]=c;
}
else
if(c==')')
{
while(stack1[top_index1]!='(')
{
top_index2++;
stack2[top_index2]=stack1[top_index1];
top_index1--;
}
top_index1--;
}
else
if(c=='+'||c=='-'||c=='*'||c=='/')
{
if(top_index1==-1||precedence(c)>precedence(stack1[top_index1]))
{
top_index1++;
stack1[top_index1]=c;
}
else
{
while(top_index1>=0&&precedence(stack1[top_index1])>=precedence(c))
{
top_index2++;
stack2[top_index2]=stack1[top_index1];
top_index1--;
}
top_index1++;
stack1[top_index1]=c;
}
}
}
while(top_index1!=-1)
{
top_index2++;
stack2[top_index2]=stack1[top_index1];
top_index1--;
}
// printf("%s\n",stack2); printf("%d\n",top_index2);
int stack3[1000];
int top_index3=-1;
for(int i=0;i<=top_index2;i++)
{
if(stack2[i]>='0'&&stack2[i]<='9')
{
top_index3++;
stack3[top_index3]=stack2[i]-48;
continue;
}
else
{
if(stack2[i]=='+')
{
int t1=stack3[top_index3];
int t2=stack3[top_index3-1];
top_index3--;
stack3[top_index3]=t1+t2;
}
if(stack2[i]=='-')
{
int t1=stack3[top_index3];
int t2=stack3[top_index3-1];
top_index3--;
stack3[top_index3]=t2-t1;
}
if(stack2[i]=='*')
{
int t1=stack3[top_index3];
int t2=stack3[top_index3-1];
top_index3--;
stack3[top_index3]=t1*t2;
}
if(stack2[i]=='/')
{
int t1=stack3[top_index3];
int t2=stack3[top_index3-1];
top_index3--;
stack3[top_index3]=t2/t1;
}
}
}
printf("%d",stack3[0]);
}
相关文章推荐
- C语言 实现中缀表达式转后缀表达式并求值
- 中缀表达式生成二叉树并利用后缀表达式进行求值运算
- 利用栈将中缀表达式转换成后缀表达式,并将得到的后缀表达式求值
- 栈:中缀表达式转后缀表达式求值(不大于10)
- C语言数据结构之利用栈将中缀表达式转换为后缀表达式
- 中缀表达式转后缀表达式求值(模板)
- 后缀表达式与中缀表达式求值
- java算术表达式求值-中缀表达式转后缀表达式
- 利用数组栈将中缀表达式转换成后缀表达式
- C语言实现括号匹配,中缀表达式转后缀表达式并计算具体代码实现
- C#实现中缀表达式转后缀表达式(RPN)并针对后者进行求值
- 数据结构 c语言设计堆栈 并将中缀表达式转换成后缀表达式
- 自己编的中缀表达式转后缀表达式(C语言),供参考,指证
- C语言课设:中缀表达式转后缀表达式并求值(续)
- [Java算法分析与设计]利用栈操作中缀表达式和后缀表达式的转换和运算
- 经典c程序(0031) ---中缀表达式转后缀表达式并求值
- 中缀表达式转后缀表达式 求值
- 栈的运用(中缀表达式转换为后缀表达式,并对后缀表达式求值。)
- 中缀表达式转后缀表达式求值(栈的应用)
- 利用栈将中缀表达式转换为后缀表达式