[工学]中 国 地 质 大 学数据结构报告1.doc
《[工学]中 国 地 质 大 学数据结构报告1.doc》由会员分享,可在线阅读,更多相关《[工学]中 国 地 质 大 学数据结构报告1.doc(36页珍藏版)》请在三一办公上搜索。
1、 中 国 地 质 大 学 数据结构上机实习报告 课程名称 数据结构 教师姓名 李桂玲 本科生姓名 杜攀洪 本科生学号 20111003732 本科生专业 网络工程 所在院系 计算机学院 类别: 报告 日期: 2012-12 目录1. 需求分析42. 设计4 (1)设计思想4 (2)概要设计5 (3)详细设计.3. 调试分析.4. 用户手册5. .测试结果6. 源程序清单 一元稀疏多项式运算器1.需求分析 设计一个一元稀疏多项式简单计算器。 要求:(1)输入并建立两个多项式; (2)多项式a与b相加,建立和多项式c; (3)多项式a与b相减,建立和多项式d; (4)输出多项式a,b,c,d。输出
2、格式:比如多项式a为:A(x)=c1xe1+ c2xe2+ cmxem, 其中,ci和ei分别为第i项的系数和指数,且各项按指数的升幂排列,即0e1e2em。2. 设计 (1)设计思路: 定义线性表的动态分配顺序存储结构,建立多项式存储结构,定义指针*next ,利用链表实现队列的构造。定义如下的结构体 typedef struct node int x,z; /z是指数,x是系数 struct node *next;*pnode每次输入一项的系数和指数,可以输出构造的一元多项式 ;演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运
3、行命令;最后根据相应的输入数据(滤去输入中的非法字符)建立的多项式以及多项式相加的运行结果在屏幕上显示。多项式显示的格式为:c1xe1+c2xe2+cnxen (2)概要设计 :本程序主要包括三个函数:结点创建函数,将输入的多项式化为字符串转化成一个只有系数、指数、后继的结构体。pnode create(char *c,int i,int j) if(ji) return NULL;int a=0,b=0,flag=0; /处理系数。 主函数void main() cout*endl; cout*一元多项式的计算(和差)*next; free(t); (3)详细设计多项式的相加(1)功能:将两
4、多项式相加。(2)数据流入:输入函数。(3)数据流出:多项式相加后的结果。(4)程序流程图:多项式的加法流程图如图2所示。(5)测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算。 开始输入ch1和ch2是 否合并同类项结束是否同指数项系数相加后存入H中直接把q1中各项存入H中直接把q2中各项存入H存储多项式ch2的空链q2是否为空存储多项式ch1的空链q1是否为空输出H 多项式相减(1)功能:将两多项式相减。(2)数据流入:调用输入函数。(3)数据流出:多项式相减后的结果。(4)程序流程图:多项式的减法流程图如图3所示。(5)测试要点:两多项式是否为空,为空则提示重新输入,否则,
5、进行运算。开始输入ch1和ch2是 否合并同类项结束是否调用相加函数直接把q1中各项存入H中把q2中系数改变后存H中存储多项式2的空链玩是否为空存储多项式ch1的空链q1是否为空输出H 将多余的结点空间释放 3、 调试分析 (1)测试的数据以及结果 (2) 算法的时间复杂度及改进算法的时间复杂度:一元多项式的加法运算的时间复杂度为O(m+n),减法运算的时间复杂度为O(m-n),其中m,n分别表示二个一元多项式的项数。问题和改进思想:在设计该算法时,出现了一些问题,在创建空间的时候没有好好地利用空间,特别是在多项式相加的时候会浪费空间使空间复杂度增加。为了使输入数据按指数降序排列,可在数据的输
6、入后先做一个节点的排序函数,通过对链表排序后再进行之后加减运算。4、 用户手册(1)本程序中包含七个函数:创建结点空间、存储多项式、相加函数、相减函数、输出函数、主函数、释放结点空间函数,利用主函数来调用其他函数来执行命令。(2)在输入多项式的时候注意不要多输入空格键,其中X要输入大写字母,否则会出现多项式不能合并同类项。(3)用户根据自己的要求来选择函数所要执行的功能。5数据测试以及结果 【测试数据示例】(1)(x+x100)+(x100+x200)(3)(2x+5x8-3x11)+(7-5x8+11x9)(4)(6x-3-x+4.4x2-1.2x9)-(-6x-3+4.4x2+7.8x15
7、) 6、源程序清单 源程序见电子档 唯一的确定一棵二叉树1、 需求分析 如果给出了遍历二叉树的前序序列和中序序列,则可以构造出唯一的一棵二叉树。 【基本要求】 已知一棵二叉树的前序和中序序列,试设计完成下列任务的一个算法: (1)构造一棵二叉树; (2)证明构造正确(即分别以前序和中序遍历该树,将得到的结果与给出的序列进行比较)。 (3)对该二叉树进行后序遍历,输出后序遍历序列。 (4)用凹入法输出该二叉树。2、 设计 (1)设计思想 存储结构:采用顺序结构 主要基本算法思想 : 定义如下结构体来定义数据类型typedef struct Nodechar data;struct Node *L
8、eftChild;struct Node *RightChild;BiTNode; 而在主函数中创建两个数组char PreMaxSize和char InMaxSize,分别用来存储前序序列和中序序列: 将前序和中序序列分别读入数组char PreMaxSize和char InMaxSize。 根据定义,前序序列中第一个元素一定是树根,在中序序列中该元素之前的所有元素一定在左子树中,其余元素则在右子树中。所以, 首先从数组char PreMaxSize中取出第一个元素char Pre0作根结点,然后在数组char InMaxSize中找到char Pre0,以它为界,在其前面的是左子树中序序列
9、,在其后面的是右子树中序序列。 若左子树不为空,沿前序序列向后移动,找到左子树根结点,转。 左子树构造完毕后,若右子树不为空,沿前序序列向后移动,找到右子树根结点,转。 前序序列中各元素取完则二叉树构造完毕。 对二叉树进行前序和中序遍历,并将结果分别与数组char PreMaxSize和char InMaxSize进行比较,若相同,则证明二叉树构造正确。 (2)概要设计:本程序主要包括四个函数: 初始化函数, void Initiate(BiTNode *root)*root=(BiTNode *)malloc(sizeof(BiTNode);(*root)-LeftChild=NULL;(*
10、root)-RightChild=NULL; 前序、中序、后序遍历函数,用以遍历所产生的树的前序、中序和后序序列,并检验根据题设所创建的树是否是唯一正确的树 void PreOrder(BiTNode *T,void Visit(char item) /前序遍历函数 void InOrder(BiTNode *T,void Visit(char item) /中序遍历函数 void PostOrder(BiTNode *T,void Visit(char item) /后序遍历函数 创建树函数,根据题设中给出的前序和中序序列创建出唯一的树 void CreateTree(BiTNode *T,
11、int pre_f,int pre_l,int in_f,int in_l,char pre,char in)int interval=0;/int same=in_f;if(prepre_f!=insame) 主函数main(),void main()BiTNode *T;int Pre_len,In_len;char PreMaxSize;/前序序列char InMaxSize;/中序序列printf(请输入前序序列:);scanf(%s,&Pre); (3)详细设计 首先输入前序和中序序列,然后根据所输入的序列创建出唯一的二叉树void CreateTree(BiTNode *T,int
12、 pre_f,int pre_l,int in_f,int in_l,char pre,char in)int interval=0; /中序遍历数组的第一个下标int same=in_f; /*same为计数器,用来确定根节点的位置,初始化为中序的起始地址 if(prepre_f!=insame) while(prepre_f!=insame) /在中序序列中找到根节点 same+; interval+; /数组下标自增 if(interval=0)&(pre_f=pre_l) /找到了叶节点,也是递归出口 T-data=prepre_f; /确定根节点 T-LeftChild=NULL;
13、/根结点的左孩子制空 T-RightChild=NULL; /根结点的左孩子制空if(interval!=0)&(intervalLeftChild=(BiTNode *)malloc(sizeof(BiTNode); /*申请左子树根结点的内存*/ T-RightChild=(BiTNode *)malloc(sizeof(BiTNode); /*申请右子树根结点的内存*/ T-data=prepre_f; CreateTree(T-LeftChild,pre_f+1,pre_f+interval,in_f,in_f+interval-1,pre,in); /*递归调用creattree函数
14、,创建根节点左子树*/ CreateTree(T-RightChild,pre_f+interval+1,pre_l,in_f+interval+1,in_l,pre,in); /*递归调用creattree函数,创建根节点右子树*/if(interval!=0)&(interval=pre_l-pre_f)/只有左子树 T-LeftChild=(BiTNode *)malloc(sizeof(BiTNode); /*申请左子树根结点的内存*/ T-data=prepre_f; CreateTree(T-LeftChild,pre_f+1,pre_l,in_f,in_f+interval-1,
15、pre,in); /*递归调用creattree函数,创建根节点左子树*/ T-RightChild=NULL;if(interval=0)&(pre_f!=pre_l)/只有右子树 T-RightChild=(BiTNode *)malloc(sizeof(BiTNode); /*申请右子树根结点的内存*/ T-data=prepre_f; T-LeftChild=NULL; CreateTree(T-RightChild,pre_f+interval+1,pre_l,in_f+interval+1,in_l,pre,in);/*递归调用creattree函数,创建根节点右子树*/ 根据创建
16、出的树将其打印,然后调用遍历函数对其进行前序、中序和后序遍历 void PreOrder(BiTNode *T,void Visit(char item) /前序遍历函数 void InOrder(BiTNode *T,void Visit(char item) /中序遍历函数 void PostOrder(BiTNode *T,void Visit(char item) /后序遍历函数 函数调用关系 Main- Initiate(&T)- CreateTree(T,0,Pre_len-1,0,In_len-1,A,B)- PrintBiTree(T,0)- PreOrder(T,Visit)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 工学中 学数据结构报告1 数据结构 报告
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-4532313.html