教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

算法与数据结构课程设计表达式求解问题(2)

来源:网络收集 时间:2026-07-26
导读: 输入:字符型,为了简便算法,只进行 + - * / 等简单运算,对算符的识别用简单的switch case; 所以 运算符栈的数据类型可以为 char 输入:数值,eg:1+1 中的 1如何处理? 为了方便,只能和输入统一为字符型,那

输入:字符型,为了简便算法,只进行 + - * / 等简单运算,对算符的识别用简单的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 #include #include #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字,全部文档内容请下载后查看。喜欢就下载吧 ……
算法与数据结构课程设计表达式求解问题(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/443095.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)