用栈来实现表达式求值
来源:互联网 发布:网络四大名著紫川 编辑:程序博客网 时间:2024/05/18 11:49
1、需求分析
设计一个程序,演示用算符优先法对算术表达式求值的过程。利用算符优先关系,实现对算术四则混合运算表达式的求值。
(1)输入的形式:表达式,例如2*(3+4)
包含的运算符只能有'+' 、'-' 、'*' 、'/' 、'('、 ')';
(2)输出的形式:运算结果,例如2*(3+4)=14;
(3)程序所能达到的功能:对表达式求值并输出
设计一个程序,演示用算符优先法对算术表达式求值的过程。利用算符优先关系,实现对算术四则混合运算表达式的求值。
(1)输入的形式:表达式,例如2*(3+4)
包含的运算符只能有'+' 、'-' 、'*' 、'/' 、'('、 ')';
(2)输出的形式:运算结果,例如2*(3+4)=14;
(3)程序所能达到的功能:对表达式求值并输出
2、系统设计
1、栈的抽象数据类型定义:
ADT Stack{
数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0}
数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}
约定an端为栈顶,ai端为栈底
基本操作:
Push(&S,e)
初始条件:栈S已存在
操作结果:插入元素e为新的栈顶元素
Pop(&S,&e)
初始条件:栈S已存在且非空
操作结果:删除S的栈顶元素,并用e返回其值
}ADT Stack
3、各个模块的主要功能:
*Push(SC *s,char c):把字符压栈
*Push(SF *s,float f):把数值压栈
*Pop(SC *s):把字符退栈
*Pop(SF *s):把数值退栈
Operate(a,theta,b):根据theta对a和b进行'+' 、'-' 、'*' 、'/' 、'^'操作
In(Test,*TestOp):若Test为运算符则返回true,否则返回false
ReturnOpOrd(op,*TestOp):若Test为运算符,则返回此运算符在数组中的下标
precede(Aop,Bop):根据运算符优先级表返回Aop与Bop之间的优先级
EvaluateExpression(*MyExpression):用算符优先法对算术表达式求值
完整的程序代码如下:
测试结果如下:
- 顶
- 3
- 踩
0 0
- 用栈来实现表达式求值
- 数据结构课程设计---------用栈来实现表达式求值
- 数据结构课程设计---------用栈来实现表达式求值
- 用栈来实现表达式求值【Java版】
- C++实现表达式求值
- 栈实现表达式求值
- c实现表达式求值
- 表达式求值,Java实现
- 表达式求值 - Java实现
- 栈实现表达式求值
- 栈实现表达式求值
- ACM--表达式求值实现
- 表达式求值(栈实现)
- 堆栈实现表达式求值
- C#实现表达式求值
- 后缀表达式实现表达式求值
- 表达式求值得实现方法
- 顺序栈实现表达式求值
- 【git使用】Failed to connect to 127.0.0.1 port 1080: Connection refused
- (1)Hadoop 1.2.1伪分布搭建
- 中转站
- 简单的文本行编辑程序——基于栈
- qq授权登录
- 用栈来实现表达式求值
- Java笔记——控制程序流程
- SSH 免密码登录 Openwrt 路由器
- bzoj1013: [JSOI2008]球形空间产生器sphere
- html5初学day3
- 表的连接
- linux中断系列之中断重要的数据结构(二)
- android开发styles.xml出错
- Redhat7.1 离线安装docker