• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-12-04
  • 语言: 其他
  • 标签: 数据结构  

资源简介

一、问题描述 在控制台下实现一个对算术表达式求值的模拟程序。 二、基本要求 该演示程序具有如下基本功能: (1) 表达式输入,以字符序列的形式从终端输入一个语法正确的数值表达式(float型),且表达式中只含有+、-、*、/、( 、)6 种运算符,输入格式如下: …… 例如表达式: 100+(15/3)*2 输入格式为: 100+(15/3)*2 注意: 输入的表达式中间不含空格。 (2) 表达式结果的输出,输出形式为: = 例如表达式: 100+(15/3)*2 输出形式为: 100+(15/3)*2 = 110 注意: 此处的输出结果为整个表达式的数值结果。 (3) 数据合法性检验 主要是针对原表达式中除数为 0 的情况。 三、界面效果 表达式求值模拟程序 功能菜单: ============== [1] 输入表达式并求值 [0] 退出 ============== 请输入你的选择 (0~1):1 请输入一个表达式 : 100+(15/3)*2 计算结果如下: 100+(15/3)*2 = 110 请输入你的选择 (0~1):0 四、测试数据 (1) 8 = (2) 1+2+3+4 = (3) 88-1*5 = (4) 1024/4*8 = (5) 1024/(4*8) = (6) (20+2)*(6/2) = (7) 3-3-3 = (8) 80/(9-9) = (9) (6+2*(3+6*(6+6)) = (10) (((6+6)*6+3)*2+6)*2 = 五、实现提示 (1) 设置运算符栈和操作数栈辅助分析算符优先关系; (2) 在读入字符序列时,完成运算符和操作数的处理,以及相应运算; (3) 在识别处运算数的同时,要将其字符序列形式转化成 float 型数据形式; (4) 输入的字符序列中,操作数不一定是一位数,可能是多位数,如 16+32 ; (5) 使用 Lab3-1 实现的栈的 ADT 基本操作完成本次作业 ; (6) 在程序中会用到两类栈:操作数栈和运算符栈,分别为 float 型数据和字符型数据, 思考在同一个程序中如何处理两类不同的数据类型? (7) 算符之间的优先关系参考课本 P53 页表 3.1 。

资源截图

代码片段和文件信息

/***
*DynaSeqStack.cpp - 动态顺序栈,即栈的动态顺序存储实现
*
*
*题目:表达式求值
*
*班级:A1 北极
*
*姓名:邱继颖
*
*学号:2008010829
*
****/

#include 
#include 
#include 
#include 
#include “DynaSeqStack.h“

const int STACK_INIT_SIZE = 100; // 初始分配的长度
const int STACKINCREMENT  = 10; // 分配内存的增量

/*------------------------------------------------------------
操作目的: 初始化栈
初始条件: 无
操作结果: 构造一个空的栈
函数参数:
SqStack *S 待初始化的栈
返回值:
bool 操作是否成功
------------------------------------------------------------*/
bool InitStack(SqStack *S)
{
assert(S != NULL);
S->base = (ElemType*)malloc(sizeof(ElemType) * STACK_INIT_SIZE);

if(S->base == NULL) return false;

S->top = S->base;
S->stacksize = STACK_INIT_SIZE;

return true;
}

/*------------------------------------------------------------
操作目的: 销毁栈
初始条件: 栈S已存在
操作结果: 销毁栈S
函数参数:
SqStack *S 待销毁的栈
返回值:

------------------------------------------------------------*/
void DestroyStack(SqStack *S)
{
assert(S != NULL);

free(S->base);
S->top = S->base = NULL;
}

/*------------------------------------------------------------
操作目的: 判断栈是否为空
初始条件: 栈S已存在
操作结果: 若S为空栈,则返回true,否则返回false
函数参数:
SqStack S 待判断的栈
返回值:
bool 是否为空
------------------------------------------------------------*/
bool StackEmpty(SqStack S)
{
assert((S.base != NULL) && (S.top != NULL));
return(S.base == S.top);
}

/*------------------------------------------------------------
操作目的: 得到栈的长度
初始条件: 栈S已存在
操作结果: 返回S中数据元素的个数
函数参数:
SqStack S 栈S
返回值:
int 数据元素的个数
------------------------------------------------------------*/
int StackLength(SqStack S)
{
assert((S.base != NULL) && (S.top != NULL));
return(S.top-S.base);
}

/*------------------------------------------------------------
操作目的: 得到栈顶元素
初始条件: 栈S已存在
操作结果: 用e返回栈顶元素
函数参数:
SqStack S 栈S
ElemType *e 栈顶元素的值
返回值:
bool 操作是否成功
------------------------------------------------------------*/
bool GetTop(SqStack S ElemType *e)
{
assert((S.base != NULL) && (S.top != NULL));
if(StackEmpty(S))
return false;

*e = *(S.top-1);
return true;
}

/*------------------------------------------------------------
操作目的: 遍历栈
初始条件: 栈S已存在
操作结果: 依次对S的每个元素调用函数fp
函数参数:
SqStack S 栈S
void (*fp)() 访问每个数据元素的函数指针
返回值:

------------------------------------------------------------*/
void StackTraverse(SqStack S void (*fp)(ElemType))
{
assert((S.base != NULL) && (S.top != NULL));
for(; S.basese++)
(*fp)(*S.base);
}

/*------------------------------------------------------------
操作目的: 压栈——插入元素e为新的栈顶元素
初始条件: 栈S已存在
操作结果: 插入数据元素e作为新的栈顶
函数参数:
SqStack *S 栈S
ElemType e 待插入的数据元素
返回值:
bool 操作是否成功
------------------------------------------------------------*/
bool Push(SqStack *S ElemType e)
{
if(S == NULL) return false;
assert((S->base != NULL) && (S->top != NULL));

// validate overflow
if(StackLength(*S) == S->stacksize)
{
El

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4331  2009-10-29 12:00  表达式求值\DynaSeqStack.cpp

     文件        881  2009-10-27 08:49  表达式求值\DynaSeqStack.h

     文件        147  2009-10-29 23:17  表达式求值\ElemType.cpp

     文件        267  2009-10-29 19:49  表达式求值\ElemType.h

     文件       3245  2009-10-30 10:49  表达式求值\Lab.cpp

     目录          0  2009-10-30 11:08  表达式求值

----------- ---------  ---------- -----  ----

                 8871                    6


评论

共有 条评论