栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构 C语言版第2版(严蔚敏) 第3章课后练习第4题——后缀表达式的运算

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构 C语言版第2版(严蔚敏) 第3章课后练习第4题——后缀表达式的运算

题目:从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:逆波兰表达式的长度不超过一行,以$作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$

代码:

#include 
using namespace std;
typedef struct
{
	int* base;
	int* top;
	int stacksize;
}SqStack;
void IntiStack(SqStack& S)
{
	S.base = new int[100];
	if (!S.base) exit(OVERFLOW);
	S.stacksize = 100;
	S.top = S.base;
	return;
}
void Push(int e,SqStack& S)
{
	if (S.top-S.base==100)
		exit(OVERFLOW);
	*(S.top++) = e;
	return;
}
void Pop(int& e, SqStack& S)
{
	if (S.top == S.base)
	{
		cout << "出栈失败,栈空" << endl; return;
	}
	e = *--S.top;
	return;
}

int calmulate(char str1[100],SqStack&Num)
{
	int e = 0; int a = 0;
	for (int i = 0; i < 100; i++)
	{
		//如果扫描位是数字
		 if(str1[i]>47&&str1[i]<58)
		     e = e * 10 + (str1[i]-48);
		 else{
				 switch (str1[i]) {
				 case ' ':
					 Push(e, Num);
					 break;
				 case'+':
					 Pop(a, Num);
					 Push(a + e, Num); break;
				 case'-':
					 Pop(a, Num); 
					 Push(a - e, Num); break;
				 case'*':
					 Pop(a, Num);
					 Push(a * e, Num); break;
				 case'/':
					 Pop(a, Num);
					 Push(a / e, Num); break;
				 case'$':
					 Pop(a, Num);
					 return a;
				 
				 }
			    e = 0;
			 }
		 if (i == 99 && str1[i] != '$'){
			 cout << "错误,请输入“$”作为表达式结尾" << endl; exit(1);
		 }
	}
}
int main()
{
	SqStack Num;
	IntiStack(Num); //初始化数字栈
	char str1[100];
	cout << "请输入后缀表达式:" << endl;
	cin.getline(str1,100);
	cout<<"结果是"< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312064.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号