数据结构上机实验报告模板(共10篇).doc
文本预览下载声明
数据结构上机实验报告模板(共10篇)
数据结构上机实验报告模板
1 / 4
2 / 4
3 / 4
4 / 4
篇二:数据结构上机实验报告
数据结构上机实验报告
欢迎交流([email#160;protected]/* */)
2015年11月20日
上机实验一
1. 上机实验简介 1)实验目的
当用户输入一个合法的算术表达式后,能够返回正确的结果。能够计算的运算符包括:加、减、乘、除、括号;能够计算的操作数要求在实数范围内;对于异常表达式能给出错误提示。
2)开发工具
C++语言,Microsoft Visual C++ 6.0开发软件 3)测试数据
分别对一位数、多位数以及小数的四则运算进行检验,我选取了下面几个式子:
3+4-5*(12/6)# 100+20*(26/13)# 1.3+3.4-(5.6/1.2)# 正确计算结果应分别为-3.00、140.00与0.03,用所做程序计算并与正确结果比较。
2. 算法说明
(1)概要说明:为实现上述程序功能:
1. 首先置操作数栈为空栈,表达式起始符#为运算符栈的栈底元素;
2. 依次扫描表达式中每个字符,若是操作数则进OPND栈;若是运算符,则
和OPTR栈的栈顶运算符比较优先权后作相应操作,直至整个表达式求值完毕。 3. 先做一个适合个位的+-*/运算, 其次就要考虑到对n位和小数点的运算。 (2)程序主要模块
主要模块有:头文件、栈定义及栈函数、运算符判断与优先级比较函数、实现计算函数
{ InitStack(amp;S)
操作结果:构造一个空栈S。 GetTop(S)
初始条件:栈S已存在。
操作结果:用P返回S的栈顶元素。 Push(amp;S,e)
初始条件:栈S已存在。
操作结果:插入元素ch为新的栈顶元素。 Pop(amp;S,e)
初始条件:栈S已存在。
操作结果:删除S的栈顶元素。 In(c)
操作结果:判断字符是否是运算符,运算符即返回1。
Precede(c1, c2)
初始条件:c1,c2为运算符。
操作结果:判断运算符优先权,返回优先权高的。 Operate(a,op,b)
初始条件:a,b为整数,op为运算符。
操作结果:a与b进行运算,op为运算符,返回其值。
EvaluateExpression()
初始条件:输入表达式合法。 操作结果:返回表达式的最终结果。}
1.栈定义及栈函数:用结构体定义栈,并实现对栈的以下操作:构造栈、取栈顶元素、入栈、出栈
2.运算符优先级比较,返回优先级高的:
算符间的优先关系如下:
3.主要操作函数。算法概要流程图:
各函数具体定义见附1程序清单。
3. 实验总结
这次实验的目的主要是在表达式求值中应用栈这种线性数据结构。DOS框实现实验操作虽然更加本质,但是却不利于与用户,尤其是非编程人员的交互,因此我设计了简单的人机交互对话框,显得更加人性化。实验结果还有许多可以改进之处,例如使程序可以接受矩阵并作一些运算,对话框界面也有必要做进一步的功能添加。 4. 附1:程序清单
(实验结果与实验程序已分享到网址/s/1ohzNC)
#include iostream using namespace std;
#define OK 1 #define ERROR 0 #define OVERFLOW -1
#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10
typedef int Status; typedef struct {
double *base; double *top; int stacksize; }SqStack1;
typedef struct {
char *base; char *top; int stacksize; }SqStack2;
Status InitStack1(SqStack1 amp;S) {
S.base=(double *)malloc(STACK_INIT_SIZE*sizeof(double)); if(!S.base) exit (OVERFLOW); S.top=S.base;
S.stacksize=STACK_INIT_SIZE; return OK; }//InitStack1
Status InitStack2(SqStack2 amp;S)
{
S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char)); if(!S.base) exit (OVERFLOW); S.top=S.base;
S.st
显示全部