C语言实现数据结构代码(二)-栈和队列-栈-应用-后缀式计算问题

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值