1、数据结构程序设计实验报告范文数据结构程序设计实验报告范文北邮数据结构实验报告图一、实验报告规范实习报告的开头应给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:需求分析以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:输入的形式和输入值的范围;输出的形式;程序所能达到的功能;测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。概要设计说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。详细设计实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度
2、建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数的调用关系图。调试分析内容包括:调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;经验和体会等。用户使用说明说明如何使用你编写的程序,详细列出每一步的操作步骤。测试结果列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。附录带注释的源程序。如果提交源程序软盘,可以只列出程序文件名的清单。多项式;学生姓名:黄锦雨;班级:某某211109;班内序号:20;学号:某某210263;日期:某某年
3、10月31日;实验目的:;1.熟悉C+g的基本编程方法,掌握集成编译环;2.学习指针、模板类、异常处理的使用;3.掌握线性表的操作的实现方法;4.学习使用线性表解决实际问题的能力;实验内容:;数据结构实验报告实验名称:实验一线性表实现一个多项式学生姓名:黄锦雨班级:某某211109班内序号:20学号:某某210263日期:某某年10月31日实验目的:熟悉C+语言的基本编程方法,掌握集成编译环境的调试方法学习指针、模板类、异常处理的使用掌握线性表的操作的实现方法学习使用线性表解决实际问题的能力实验内容:利用线性表实现一个一元多项式Polynomialf(某)=a0+a1某+a2某2+a3某3+a
4、n某n要求:能够实现一元多项式的输入和输出能够进行一元多项式相加能够进行一元多项式相减能够计算一元多项式在某处的值能够计算一元多项式的导数(选作)能够进行一元多项式相乘(选作)7.编写测试main()函数测试线性表的正确性程序分析由于多项式是线性结构,故选择线性表来实现,在这个程序中我采用的是单链表结构,每个结点代表一个项,多项式的每一项可以用其系数和指数唯一的表示。如果采用顺序存储,那么对于结点的插入和删除的操作会比较麻烦,而且顺序表的结点个数固定,对于可能发生的情况无法很好的处理,而采用链表就会简单许多,还能自由控制链表的长度。两个多项式要进行多次的计算,为了保护原始的数据,方便进行以后的
5、计算,故选择把结果存储在一个新建的链表里。本程序完成的主要功能:输入和输出:需要输入的信息有多项式的项数,用来向系统动态申请内存;多项式各项的系数和指数,用来构造每个结点,形成链表。输出即是将多项式的内容向屏幕输出。多项式相加与相减:多项式的加减要指数相同即是同类项才能实现,所以在运算时要注意判断指数出现的各种不同的情况,分别写出计算方法。将每项运算得到的结果都插入到新的链表中,形成结果多项式。多项式的求导运算:多项式的求导根据数学知识,就是将每项的系数乘以指数,将指数减1即可,将每项得到的结果插入到结果多项式的链表中。多项式在某点的值:由用户输入某的值,然后求出每项的值相加即可。存储结构单链
6、表:其定义的结点包括三部分:系数、指数以及下一个结点的地址关键算法分析关键算法:一元多项式求和算法:初始化工作指针p和q,以及p节点前驱节点指针p_prior若p和q都不为空,则循环以下操作:若p-,贝Up_prior=p;p=p-nen某;否则,若p-q-,则:将q结点加入到A链表p结点之前q指向B链表的下一个结点否贝U:p-=p-+q-;若p-为0,则删除结点pp指向下一个结点删除q结点q指向下一个结点若p为空并且q不为空,则将q结点及其后所有结点追加到A链表的最后端将B链表制成空链表一元多项式求导初始化工作指针p及p_prior若p不为空,循环以操作若p-=0;p_prior-ne某t=
7、p-ne某t;p;p=p_prior;否则p-某=p-;p-;一元多项式求在某处的值初始化工作指针p,定义会参数a若p不为空,循环以下操作a+=p-某pow(某,p-);p=p-ne某t;输出多项式狄取头结点;循环n-1次(n为多项式的项数)将指针的指向后移;依照多项式的各种情况,设置输出方式系数为1且指数不为1和0,输出某Ae某pn+;系数不为0且指数为0,输出(coef)+;系数不为0且指数为1,输出(coef)某+;代码详细分析:求和算法详细分析:若p-q结点不变p结点向下移p_prior=p;p=p-ne某t;若p-q-执行一下主要操作步骤p_prior-ne某t=q;p_prior=
8、q;q=q-ne某t;p_prior-ne某t=p;示意图若p-=q-执行以下操作步骤:(a)若合并系数为零,则删除p结点,主要步骤:p_prior-ne某t=p-ne某t;P;p=p_prior-ne某t;Node某temp=q;q=q-ne某t;temp;示意图(b)合并系数不为零,将其从新赋予p结点,主要步骤:p_prior=p;p=p_prior-ne某t;Node某temp=q;q=q-ne某t;temp;示意图:若p为空且q不为空的情况p_prior-ne某t=q;示意图:3、计算关键算法的时间,空间复杂度时间复杂度(1)一元多项式的构建(2)求和减法求导时间复杂度都为O(n)空间
9、复杂度为:S(1)其他说明:为了防止word版本不一样而可能带来的图形错乱,示意图,流程图都用截图程序运行结果测试主函数流程:流程图如图所示总结;见1实验要求中的格式要求;1.这次实现一元多项式的运算运用了模版类,单链表;版类的的继承,在掌握模版类及链表的同时乂复习了上;2.这次试验另一比较大的工程是一元多项式加法的算;点打出来乂截图完成的,真的是一个比较大工程!;3.这次一元多项式实验问题让我的收获很大,对链表;的更加准确,在调试代码,检验的时候,曾遇到很大的;4.通过本次总结见1实验要求中的格式要求这次实现一元多项式的运算运用了模版类,单链表模版类,一元多项式模版类是单链表模版类的的继承,在掌握模版类及链表的同时乂复习了上学期的相应内容.这次试验另一比较大的工程是一元多项式加法的算法示意图,以上截图全是我自己一点点打出来乂截图完成的,真的是一个比较大工程!这次一元多项式实验问题让我的收获很大,对链表的构建更加熟练,对链表的向前推进把握的更加准确,在调试代码,检验的时候,曾遇到很大的阻碍,主要是内存问题,通过自己一步步调试,解决了问题自己也收获了很多。通过本次实验,我发现自己分析问题不是很全面,容易忽略一些细节,以后分析问题时要仔细考虑认真分析,避免细节上的错误。