算术运算符

本文介绍了使用算符优先法来求解正浮点数算术表达式的方法,结合栈这一数据结构进行运算。讨论了ADT Stack和ADT Arithmetic的抽象数据类型,包括其基本操作如Push、Pop、EvaluateExpression等。文章还指出该方法仅适用于正浮点数,对于含有负数或更多符号的情况需进行改进,并提供了相关的参考资料。
摘要由CSDN通过智能技术生成

算术运算符

需求分析
表达式求值的一种算法称为“算符优先法”,即定义算符之间的优先关系,在求解过程中,通过比较算符之间的优先关系,最终获得表达式的求解结果。
(1)以字符序列的形式从终端输入语法正确的、不含变量的任意位正浮点数表达式。
(2)根据表1给出的算符优先关系进行运算,且输入的算符只包含表中这7种。
(3)运算任意位正浮点数的算术四则混合运算表达式,得出结果并输出。
在这里插入图片描述
抽象数据类型
ADT Stack
{
数据对象:
数据对象:
数据关系:
在这里插入图片描述
基本操作:
InitStack(&S)
操作结果:构造一个空栈S。
Push(&S,e)
初始条件:栈S存在
操作结果:插入元素e为新的栈顶元素。
Gettop(&S)
初始条件:栈S已存在并且非空
操作结果:用e返回栈顶元素。
Pop(&S,&e)
初始条件:栈S已存在并且非空
操作结果:删除S的栈顶元素,并用e返回其值。
EvaluateExpression()
操作结果:计算最终的结构并且返回其值。
}ADT Stack

ADT Arithmetic
{
数据对象:
D={}
基本操作:
Zhuanhuan(a)
初始条件:a为字符串
操作结果:a转换为浮点数并返回。
In( c)
操作结果:判断字符c是否为符号。是返回TRUE,不是返回FALSE
Precede(a,b)
操作结果:比较a,b的优先顺序。返回”>””<”或”=”三种字符串。
Operate(a,theta,b)
操作结果:运算,其中a,b为数字,theta为符号。
EvaluateExpression()
操作结果:计算最终的结构并且返回其值。
}ADT Arithmetic

模拟运行过程

在这里插入图片描述
代码

#include<iostream>
#include<string>
#include <sstream>
#include<stdlib.h>
#pragma warning(disable:4996)
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
using namespace std;
typedef int Status;
typedef struct SNode {
   
	string data;
	struct SNode *next;
} SNode;
typedef struct node
{
   
	SNode* top;
	int count;
}*LinkStack;
//构造一个空栈
Status InitStack(LinkStack &S) {
   
	S = new node();
	S->top = NULL;
	S->count = 0;
	return TRUE;
}

//插入e
Status Push(LinkStack &S, string e) {
   
	SNode *p = new SNode();
	if (!p) {
   
		return OVERFLOW;
	}
	p->data = e;
	p->next = S->top;
	S->top = p;
	S->count++;
	return TRUE;
}

//用e返回S的栈元素
stri
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值