算法与数据结构课程设计表达式求解问题(2)
输入:字符型,为了简便算法,只进行 + - * / 等简单运算,对算符的识别用简单的switch case;
所以 运算符栈的数据类型可以为 char
输入:数值,eg:1+1 中的 1如何处理?
为了方便,只能和输入统一为字符型,那么问题变为了,数值只能为1位整数(0~
9),因为程序目的是算法,所以可以简化为此。
但新问题来了,表达的运算中间结果或最终结果,不一定是 1位整数,eg:1+2*
5=?其中中间结果为10,最终结果为11。那么数据栈可以有以下2种结构设计:
方案1、数据栈元素类型为char,只保存 0~9字符即ASCII码为 30H~39
H,对于输入不转化,直接入数据栈,但在数据出栈参与运算前,先将字符0~9转为数字0~9。且最终结果也要逆向再转换一次,且若(中间)结果位数>1位,那么新的问题又引发了,如何存储和识别数据的位数。。。由此可见数据栈类型为char 会加大操作算法的难度。故放弃!
方案2、数据栈元素为int 型,当然,操作算法也要加强,但相比方案1的难度,
会小得多!加强如下:
输入数据(只能为1位数据,或加入位数识别函数),要先将字符0~9转化为 相
应数字0~9即ASCII减30H(48),这没什么难度。然后是(中间)结果,这里也没难度,只要结果在 -65536~+65535之间即可直接存入。因此选方案二。
6
二 详细设计
1程序模块
************************************************* ConsoleMain.c
*************************************************#define DEBUG 0 #include
void main() {
char input=1;
int nShowInfo=1; // 是否显示帮助信息 do {
Evaluateexpression_r_r_r(nShowInfo); nShowInfo=0;
printf(\
getchar(); // 接收多的一个回车键字符 input=getchar(); if(input=='Y'|| input=='y')
7
input=1; else input=0; }while(input); }
************************************************************ EvaluateExp.h
************************************************************
#ifndef HEAD_LIST_SQ // 头文件定义宏,避免重复定义 #define HEAD_LIST_SQ
#define STACK_INIT_SIZE 100 #define STACK_INCREMENT_SIZE 10
#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0
#define INFEASIBLE -1 // 不可行的 #define OVERFLOW -2
typedef int Status;// 函数状态返回码为int 型
typedef char OptrElemType; // 运算符栈元素类型,可以用所有基本类型以及结构体类型等,
8
这里设为char 。
typedef int OpndElemType; // 数据栈元素类型 typedef struct {
OptrElemType * base; OptrElemType * top; int stacksize; }SqStackOptr; typedef struct {
OpndElemType * base; OpndElemType * top; int stacksize; }SqStackOpnd;
Status InitStackOptr(SqStackOptr *p_optr); Status InitStackOpnd(SqStackOpnd *p_opnd);
Status PushOptr(SqStackOptr *p_optr,OptrElemType OptrE); Status PushOpnd(SqStackOpnd *p_opnd,OpndElemType OpndE); Status PopOptr(SqStackOptr *p_optr,OptrElemType *p_optrE); Status PopOpnd(SqStackOpnd *p_opnd,OpndElemType *p_opndE); OptrElemType GetStackOptrTop(SqStackOptr *p_optr); OpndElemType GetStackOpndTop(SqStackOpnd *p_opnd); Status IsOptr(char ch); Status IsOpnd(char ch);
Status TranslateNum(OpndElemType *p_data,OptrElemType *p_ch); char CompareOptr(OptrElemType optr_A,OptrElemType optr_B);
Status OpndCount(OpndElemType *p_opnd_X,OpndElemType *p_opnd_A,OptrElemType
9
theta,OpndElemType *p_opnd_B); Status DestroyStackOptr(SqStackOptr *p); Status DestroyStackOpnd(SqStackOpnd *p); Status Evaluateexpression_r_r_r(int nShowInfo); #endif
三 程序运行
10
…… 此处隐藏:592字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




