《2022年数据结构利用线性表链式存储实现一元多项式相加减课程方案实验报告.docx》由会员分享,可在线阅读,更多相关《2022年数据结构利用线性表链式存储实现一元多项式相加减课程方案实验报告.docx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用课题名称 利用线性表链式储备实现一元多项式相加减院系姓名学号数 据 结 构 课 程 设 计设计题目:利用线性表链式储备实现一元多项式相加减名师归纳总结 - - - - - - -第 1 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用1、课题设计目的:明白数据结构与算法的设计方法,独立分析和设计一元多项式 加减的程序编码,通过程序编写把握软件开发过程的问题分析、系 统设计、程序编码、测试等基本方法和技能,提高综合运用所学的 理论学问和方法独立分析和解决问题的才能,通过这次实践
2、将实际 问题中所涉及的对象在运算机中表示出来并对它们进行处理,把握 线性表的链式储备如何实现一元多项式的加减;1、课题设计意义:课题设计 目的与 设计意义通过完成此次课题,可以明白各种数据结构内在的规律关系,争论它在运算机中的储备表示,以及在其上进行各种运算时的算法 实现,并对算法的效率和优化进行简洁的分析和争论,不仅加强了 同学对于线性表链式储备的懂得,也提高了同学的思维才能,促进同学的综合应用才能和专业素养的提高;指导老师:目录年月日第一章、课题描述 1 名师归纳总结 其次章、课题设计目的1 第 2 页,共 16 页第三章、课题设计意义1 第四章、设计思路1 第五章、需求分析2 - - -
3、 - - - -精选学习资料 - - - - - - - - - 第六章、概要设计2 个人资料整理仅限学习使用6.1 、储备结构: 2 6.2 、基本算法: 2 6.2.1 、输入输出 2 6.2.2 、构造数据类型 3 6.2.3 、多项式的加法 4 6.2.4 、多项式的减法 4 第七章、程序结果及截图 4 第八章、算法的时间复杂度及改进 5 第九章 、总结及心得体会 5 第十章、附录 6 名师归纳总结 第十一章、参考文献13 第 3 页,共 16 页- - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用第一章、课题描述能够完成两个或多个多项
4、式的输出,并且实现两个多项式的相加和相减,并且输出 结果;其次章、课题设计目的明白数据结构与算法的设计方法,独立分析和设计一元多项式加减的程序编 码,通过程序编写把握软件开发过程的问题分析、系统设计、程序编码、测试等基 本方法和技能,提高综合运用所学的理论学问和方法独立分析和解决问题的才能,通过这次实践将实际问题中所涉及的对象在运算机中表示出来并对它们进行处理,把握线性表的链式储备如何实现一元多项式的加减,通过不断探究程序的算法,不 断优化程序,使得同学的学问把握更加坚固,实践才能加强,也激发了同学对于数 据结构这门课的爱好,为以后这门课的深化争论做了预备,这次实践使同学更加深 入明白了数据结
5、构内在的规律关系;第三章、课题设计意义通过完成此次课题,可以明白各种数据结构内在的规律关系,争论它在计 算机中的储备表示,以及在其上进行各种运算时的算法实现,并对算法的效率和优化进行简洁的分析和争论,不仅加强了同学对于线性表链式储备的懂得,也提高了 同学的思维才能,促进同学的综合应用才能和专业素养的提高,解决了现实生活中 复杂繁琐的运算过程,不仅提高了效率,也增加了正确率,同学对于线性表和指针 等学问的懂得更加深化深刻,也敏捷运用了理论学问解决了实际问题,活学活用,加强了同学的实践才能,同时完成作业仍需要与同学的争论,增强了同学的团队合 作才能;第四章、 设计思路这个程序的关键是多项式的创建和
6、排列,以及相加时相同指数的系数相加;由于多 项式拥有指数和系数,所以可以定义一个包含指数系数的结构体,用单链表储备多项式的数据,所以结构体包含next 指针;数据插入时比较两数的指数,依据降序排列,从表头的 next 开头,直至找到合适的位置,然后开头链表中数值的插入,假如 相等就直接将指数相加,假如大于就将新数据插入到当前指向的前面,否就将新数 据插入到最终;输入完数据后挑选运算方式,多项式运算时要循环遍历整个多项 式,多项式的每一组数据都要和另一个多项式整组数据相运算 每一个运算值都储备 到新建的“ 多项式” 链表中),直至两个多项式都遍历完终止;名师归纳总结 - - - - - - -第
7、 4 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用第五章、 需求分析1界面输出,提示如何输入数据;要求先输入多项式的项数;2创建多项式;接收输入的数据,并储存到链表中;3显示程序的功能表,答应使用者挑选运算类型;4显示已经创建好的多项式;6实现加法运算;7实现减法运算;9清除内存内容,销毁创建的链表,退出程序;第六章、 概要设计6.1 、储备结构:一元多项式的表示在运算机内可以用链表来表示,为了节约储备空 间,只储备多项式中系数非零项;链表中的每一个结点存放多项式的一个系数非零 项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点
8、的指针;创建一元多项式链表,对一元多项式的运算中会显现的各种可能情形进行分 析,实现一元多项式的加减;6.2 、基本算法:6.2.1 、输入输出1)功能:将要进行运算的多项式输入输出;2)数据流入:要输入的多项式的系数与指数;3)数据流出:合并同类项后的多项式;4)程序流程图:多项式输入流程图如图 1 所示;5)测试要点:输入的多项式是否正确,如输入错误就重新输入;否就进行运算;名师归纳总结 - - - - - - -第 5 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用开头申请结点空间输入多项式的项数输入多项式各项的系数 x, 指数 y 输出已输
9、入的多项式否是否输入正确是合并同类项终止图表 1 输入输出流程图6.2.2 、构造数据类型依据上面的解决途径可以对指数,系数及指针进行以下说明:typedef struct pnode int exp ; /* 指数 */ float coef ; /* 系数 */ struct pnode *next ;名师归纳总结 - - - - - - -第 6 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用polynode ;6.2.3 、多项式的加法1)功能:将两多项式相加;2)数据流入:输入函数;3)数据流出:多项式相加后的结果;4)程序流程图:多项式
10、的加法流程图如图 2 所示; 5 )测试要点:两多项式是否为空,为空就提示重新输入,否就,进行运算;6.2.4 、多项式的减法1)功能:将两多项式相减;2)数据流入:调用输入函数;3)数据流出:多项式相减后的结果;4)程序流程图:多项式的减法流程图如图 3 所示;,其中 m,n 分别表示二个一元多项式的项数;2、问题和改进思想:在设计该算法时,显现了一些问题,例如在建立链表时头指针 的设立导致了之后运用到相关的指针时没能很好的移动指针显现了数据重复输出或 是输出系统缺省值,不能实现算法;实现加法时该链表并没有向通常那样通过建立 第三个链表来存放运算结果,而是再度利用了链表之一来进行节点的比较插
11、入删除 等操作;为了使输入数据按指数降序排列,可在数据的输入后先做一个节点的排序 函数,通过对链表排序后再进行之后加减运算第九章、总结及心得体会 此次上机试验应用了线性表实现了一次实际操作,完成了一个一元多项式的简 单运算器,不仅对此次编译程序的算法思想有了新的熟悉,仍让我深刻的体会到了 线性表的重要性以及其应用的便利,并且对指针加深了印象,应用了书本中的算法思想,对我以后的编译以及完成新的程序有很大的帮忙;通过这次课程设计练习,使我更深刻地懂得了语言的精髓-指针的使用;完成整个程序设计有,对指针把握的更加娴熟;同时通过直接对链表的操作,加深了对数据结构的懂得和熟悉;并在完成课 程设计的过程主
12、动查阅了相关资料,学到了不少课本上没有的技术学问;经过这次课程设计,我深刻熟悉到算法在程序设计中的重要性,一个完整的名师归纳总结 - - - - - - -第 8 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用程序总是由如干个函数构成的,这些相应的函数表达了算法的基本思想;编程是一件枯燥乏味工作,但是只要仔细钻研,我们会从中学到许多在课本上学不到或者无法在课堂上把握的学问,同时也能从中感受到编程的乐趣;爱好是可以培育的,只要坚持下去,面对困难我们总能够找到解决问题的方法;运算多项式的加、减、乘法运算-该程序虽然不是很大,这次仍是由几位同学合作才完成
13、这一任务;在这个小组中我是组长,通过分工与合作,使我充分认识到在工程团队开发过程中合作的重要性,也更加懂得了沟通协作才能在软件开发行业中的重要性;另外也需要提出的是在这次程序设计的过程中,特别感谢老师对我们的耐心指导;老师在教案过程中表现出来的对学术钻研一丝不苟的精神让我特别有收成;同样也是老师的严格要求才使得小组成员能够顺当的完成任务;第十章、附录#include #include typedef struct pnode int exp;float coef;struct pnode *next;polynode;polynode *A,*B,*C,*D ;polynode *creatA
14、 polynode *p1,*r ;int i,n;A=polynode*mallocsizeofpolynode ; A-next=NULL ;r=A;printf 请输入 A 多项式的项数 :;scanf%d,&n ;fori=1 ;i p1=polynode*mallocsizeofpolynode; printf 请输入 A 的第 i 项的系数和指数 :,i;名师归纳总结 - - - - - - -第 9 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用 scanf%f%d,&p1-coef,&p1-exp ;r-next=p1;r=p1;
15、r-next=NULL ;return A; polynode *creatB polynode *p2,*r ;int i,n;B=polynode*mallocsizeofpolynode ;B-next=NULL ;r=B;printf 请输入 B 多项式的项数 : ;scanf%d,&n ;fori=1 ;i p2=polynode*mallocsizeofpolynode; printf 请输入 B 的第 i 项的系数和指数 :,i ; scanf%f%d,&p2-coef,&p2-exp ;r-next=p2;r=p2; r-next=NULL ;return B; void pr
16、intApolynode *A polynode *p1;p1=A-next;whilep1-next.=NULL ifp1-next-coef0 printf%.2fx%d+,p1-coef,p1-exp ;else 名师归纳总结 - - - - - - -第 10 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用printf%.2fx%d,p1-coef,p1-exp ;p1=p1-next; printf%.2fx%d,p1-coef,p1-exp ; void printBpolynode *B polynode *p2;p2=B-next;
17、whilep2-next.=NULL ifp2-next-coef0 printf%.2fx%d+,p2-coef,p2-exp ;else printf%.2fx%d,p2-coef,p2-exp ;p2=p2-next; printf%.2fx%d,p2-coef,p2-exp ; void printCpolynode *C polynode *p=C-next;whilep-next.=NULL ifp-next-coef0 printf%.2fx%d+,p-coef,p-exp ;else printf%.2fx%d,p-coef,p-exp ;p=p-next; printf%.2
18、fx%d,p-coef,p-exp ; void printDpolynode *D 名师归纳总结 - - - - - - -第 11 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用 polynode *p=D-next;whilep-next.=NULL ifp-next-coef0 printf%.2fx%d+,p-coef,p-exp ;else printf%.2fx%d,p-coef,p-exp ;p=p-next; printf%.2fx%d,p-coef,p-exp ; polynode *polyaddpolynode *A,pol
19、ynode *B polynode *p1,*p2,*p,*C ;float x;p1=A-next;p2=B-next;p=polynode*mallocsizeofpolynode;p-next=NULL ;C=p;whilep1&p2 ifp1-exp=p2-exp x=p1-coef+p2-coef;ifx.=0 p-next=polynode*mallocsizeofpolynode ;p=p-next;p-coef=x;p-exp=p1-exp; p1=p1-next;p2=p2-next; else 名师归纳总结 - - - - - - -第 12 页,共 16 页精选学习资料
20、- - - - - - - - - 个人资料整理 仅限学习使用 p-next=polynode*mallocsizeofpolynode;p=p-next;ifp1-expp2-exp p-coef=p2-coef;p-exp=p2-exp;p2=p2-next; else p-coef=p1-coef;p-exp=p1-exp;p1=p1-next; whilep1.=NULL p-next=polynode*mallocsizeofpolynode; p=p-next; p-coef=p1-coef; p-exp=p1-exp; p1=p1-next; whilep2.=NULL p-ne
21、xt=polynode*mallocsizeofpolynode; p=p-next; p-coef=p2-coef; p-exp=p2-exp; p2=p2-next; p-next=NULL ;return C; 名师归纳总结 - - - - - - -第 13 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用 polynode *polyminuspolynode *A,polynode *B polynode *p1,*p2,*p,*D ;float x;p1=A-next;p2=B-next;p=polynode*mallocsizeofp
22、olynode;p-next=NULL ;D=p;whilep1&p2 ifp1-exp=p2-exp x=p1-coef-p2-coef;ifx.=0 p-next=polynode*mallocsizeofpolynode ;p=p-next;p-coef=x;p-exp=p1-exp; p1=p1-next;p2=p2-next; else p-next=polynode*mallocsizeofpolynode;p=p-next;ifp1-expp2-exp p-coef=p2-coef;p-exp=p2-exp;p2=p2-next; else 名师归纳总结 - - - - - -
23、-第 14 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用p-coef=p1-coef;p-exp=p1-exp;p1=p1-next; whilep1.=NULL p-next=polynode*mallocsizeofpolynode; p=p-next; p-coef=p1-coef; p-exp=p1-exp; p1=p1-next; whilep2.=NULL p-next=polynode*mallocsizeofpolynode; p=p-next; p-coef=-p2-coef; p-exp=p2-exp; p2=p2-next;
24、 p-next=NULL ;return D; void main polynode *p1,*p2,*p ;int i;whilei Antt1:创建多项式 Bntt2: 多项式 A 与多项式 printftt0: 创建多项式 B 相加ntt3:输出多项式 Antt4: 输出多项式 Bntt5: 输出相加后的多项式 Cntt6:多 项式 A 与多项式 B 相减 ntt7:输出相减后的多项式 Dn;scanf%d,&i ;switchi 名师归纳总结 - - - - - - -第 15 页,共 16 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用 case 0:
25、creatA;break;case 1:creatB;break;case 2:p=polyaddA,B;break;case 3:printAA;break;case 4:printBB;break;case 5:printCp;break;case 6:p=polyminusA,B;break;case 7:printDp;break; printfntt0: 终止ntt1:连续n ;scanf%d,&i ; 第十一章、参考文献名师归纳总结 1 唐策善、李龙澍、黄刘生.数据结构用C 语言描述 .高等训练出版社第 16 页,共 16 页2 孙家启 .C 语言程序设计教程.合肥工业高校出版社- - - - - - -