数据结构课程设计(三)---算术表达式求值 (必做) (栈)

本文介绍了如何使用C++设计一个算法,通过运算符优先法和栈数据结构处理算术表达式,包括输入验证、错误提示、非整数处理以及结果输出,同时展示了如何通过Set_Color函数改进界面显示。
摘要由CSDN通过智能技术生成
1.3.1 题目内容
1.3.1-A [问题描述]

一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正实数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#6+15*(21-8/4)#。引入表达式起始、结束符是为了方便。编程利用“运算符优先法”求算术表达式的值。

1.3.1-B [基本要求]

(1) 从键盘或文件读入一个合法的算术表达式,输出正确的结果。

(2) 显示输入序列和栈的变化过程。

(3) 考虑算法的健壮性,当表达式错误时,要给出错误原因的提示。

(4) 实现非整数的处理(*)。

1.3.2 算法思想

本题创建两个栈:一个用于存储数字(nums),一个用于存储运算符(ops)。首先读入用户输入的算术表达式,并判断起始和结束符是否为"#"。然后遍历表达式中的每个字符:1,如果是数字或小数点,将其添加到字符串numStr中,以便后续转换为实际数字。2,如果是空格,则忽略。如果是左括号"(",直接将其压入运算符栈ops中。3,如果是右括号")",则执行相应的计算操作,直到栈顶元素是左括号为止。4,如果是运算符,则通过precedence函数判断符号的优先级,如果栈顶运算符的优先级大于等于当前运算符的优先级,则执行相应的计算操作,直到栈顶运算符的优先级小于当前运算符的优先级或栈为空。通过calculate函数实现计算操作,push函数将当前运算符压入运算符栈ops中。如果遍历完表达式后,数字字符串numStr非空,则将其转换为实际数字,并压入数字栈nums中。对剩余的运算符进行计算操作,直到运算符栈为空。返回数字栈nums的栈顶元素,即为表达式的最终结果。

    在结果显示方面,为了实现良好交互的界面,通过Set_Color函数来控制字体颜色,其中,入栈显示为绿色,出栈显示为红色。

1.3.3 数据结构

存储相关信息的动态申请空间的栈,结构体申明如下:

1.3.3-A Stack

typedef struct Stack

{

// 栈顶指针

    int top;

    

    // 栈的容量

    int capacity;

    

    // 存储数据的数组

    double* data;

}Stack;

1.3.5 测试数据与运行结果
1.3.5-A 测试数据

测试样例1:1+324

测试样例2:#4+7a+fs

测试样例3:#3.3+6/0+(2+1.9)*2#

测试样例4:#6+15*(21-8/4)#

源码地址:GeekclubC/Course-Design-of-Data-Structure: 用C++完成的数据结构课程设计 (github.com)

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值