#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define maxSize 100
/*
顺序栈的应用(二) : 求后缀表达式的数值
问题:编写一个函数,求后缀式的数值,后缀式存在一个数组exp[]中,
exp中最后一个字符为 "\0",作为结束符,并且假设后缀式中的数字都只有一位,
本题中出现的运算都是整除运算,如2/3=0,3/2=1.
分析: 前缀表达式是将运算符放在两个操作数之前;
后缀表达式是将运算符放在两个操作数之后;
例如:
中缀表达式(A+(B-C/D)*E)对应的
前缀表达式是(+A*-B/CDE)
后缀表达式为(ABCD/-E*+)
解题过程:
1、将一个后缀表达式存入一个数组中
2、编写一个函数,计算数组中的后缀表达式的值
1、对数组的处理:
是数字就入栈
是运算符号就出栈两个数字,结合进行运算,得到新数字,再入栈
当扫描到数组的最后一个符号"\0"的时候,直接返回栈中元素,为后缀式的运算结果
*/
//运算函数,输入两个数字和运算符,返回计算结果
int Calculate(int x, int y, char op)
{
if(op=='+')
return x+y;
if(op=='-')
return x-y;
if(op=='*')
return x*y;
if(op=='/')
if(y==0)
return 0;
else
return x/y;
}
//对数组的处理
int dealStr(char str[])
{
//初始化一个栈
int stack[100];
int top=-1;
//对数组进行操作
int i=0;
int x,y;
while(str[i]!='\0')
{
if(str[i]>='0'&&str[i]<='9') //如果是数字,就入栈 注意:字符型和整型的转换
{
stack[++top]=str[i]-'0';
}
else //如果不是数字,是运算符号,就从栈顶取出两个数字,结合运算符号,生成一个新的数字,存入栈顶
{
x=stack[top--];
y=stack[top--];
int z=Calculate(x,y,str[i]);
stack[++top]=z;
}
++i;
}
return stack[top];
}
int main()
{
char str[100]="325*+6*1+";
printf("运算结果为:%d",dealStr(str));
return 0;
}
C语言实现数据结构代码(二)-栈和队列-栈-应用-后缀式计算问题
最新推荐文章于 2022-07-17 18:49:05 发布