数据结构实验报告(4)

2018-11-23 22:26

return 0; }//返回算符位序

char precede(char Aop, char Bop) {

return Prior[ReturnOpOrd(Aop,OP)][ReturnOpOrd(Bop,OP)]; }//判断优先级

float EvaluateExpression(char* MyExpression) { //主函数 // 算术表达式求值的算符优先算法。

// 设OPTR和OPND分别为运算符栈和运算数栈,OP为运算符集合。 charstack OPTR; // 运算符栈,字符元素 intstack OPND; // 运算数栈,实数元素 char TempData[20]; float Data,a,b; char theta,*c,x,Dr[2]; InitStack (OPTR); Push (OPTR, '#'); InitStack (OPND); c = MyExpression;

strcpy(TempData,\把src所指由NULL结束的字符串复制到dest所指的数组中 TempData置0

while (*c!= '#' || GetTop(OPTR)!= '#') { if (!In(*c, OP)) {//不是运算符

Dr[0]=*c; Dr[1]='\\0';

strcat(TempData,Dr);//把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\\0')并添加'\\0'。 c++;

if(In(*c,OP)) {

Data=(float)atof(TempData); Push(OPND, Data);

strcpy(TempData,\清空TempData,最长位数不能超过20位

}

} else { // 不是运算符则进栈

switch (precede(GetTop(OPTR), *c)) {

16

case '<': // 栈顶元素优先权低 Push(OPTR, *c); c++; break;

case '=': // 脱括号并接收下一字符 Pop(OPTR, x); c++; break;

case '>': // 退栈并将运算结果入栈 Pop(OPTR, theta); Pop(OPND, b);

Pop(OPND, a); Push(OPND, Operate(a, theta, b)); break; } // switch } } // while

return GetTop(OPND); } // EvaluateExpression status main(){

float i=0;int j=0;char c; do{

printf(\,请输入算符表达式:(例如“3+2”,按E退出)\\n\char exp[50]; for(j=0;j<50;j++) {

c=getchar();//每次读取一个 if(c!=10) exp[j]=c; else

{if(exp[j-1]!='#')exp[j]='#';break;}//若忘记输入#则自动添加 }

if(exp[0]=='e'||exp[0]=='E')//程序出口 { getchar();break;}

17

i=EvaluateExpression(exp); printf(\}

while(2>1);//确保无限循环 } 截图:

图:

八.实验小结

通过这个实验,进一步了解了栈和队列的定义和特性,进一步学习

了符优先级 ,了解了用算符优先级对算术表达式的求解过程,

18

南昌大学实验报告

---(3)二叉树及其应用

学生姓名: 学 号: 专业班级:

实验类型:□ 验证 □ 综合 ■ 设计 □ 创新 实验日期: 2010-4-26 实验成绩:

一.实验目的

树是数据结构中应用极为广泛的非线性结构,本单元的实验达到熟悉二叉树的存储结构的特性,以及如何应用树结构解决具体问题。

二.问题描述

首先,掌握二叉树的各种存储结构和熟悉对二叉树的基本操作。其次,以二叉树表示算术表达式的基础上,设计一个十进制的四则运算的计算器。

如算术表达式:a+b*(c-d)-e/f

b

C

-

d

a

*

e

-

+

/

f

三.实验要求

1.如果利用完全二叉树的性质和二叉链表结构建立一棵二叉树,分别计算

1)统计叶子结点的个数; 2)求二叉树的深度。

2.十进制的四则运算的计算器可以接收用户来自键盘的输入; 3.由输入的表达式字符串动态生成算术表达式所对应的二叉树;

19

4.自动完成求值运算和输出结果。

四.实验环境

PC微机

DOS操作系统或 Windows 操作系统

Turbo C 程序集成环境或 Visual C++ 程序集成环境

五.实验步骤

1.根据二叉树的各种存储结构建立二叉树; 2.设计求叶子结点个数算法和树的深度算法;

3.根据表达式建立相应的二叉树,生成表达式树的模块; 4.根据表达式树,求出表达式值,生成求值模块; 5.程序运行效果,测试数据分析算法。

六.测试数据

1.输入数据:2.2*(3.1+1.20)-7.5/3 正确结果:6.96

2.输入数据:(1+2)*3+(5+6*7); 正确输出:56

七.实验结果 程序:#include

#include typedef char elemtype; struct bitree {elemtype data; bitree*lchild,*rchild;};

bitree *create() {bitree*root,*s,*q[100]; int front=1,rear=0; char ch; root=NULL;

printf(\scanf(\while(ch!='#') {s=NULL; if(ch!=',')

{s=(bitree*)malloc(sizeof(bitree)); s->data=ch;

20


数据结构实验报告(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:棚户区改造工程施工组织设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: