多项式的简单运算数据结构课程设计.doc

上传人:数据九部 文档编号:10173537 上传时间:2021-04-25 格式:DOC 页数:15 大小:248KB
返回 下载 相关 举报
多项式的简单运算数据结构课程设计.doc_第1页
第1页 / 共15页
多项式的简单运算数据结构课程设计.doc_第2页
第2页 / 共15页
多项式的简单运算数据结构课程设计.doc_第3页
第3页 / 共15页
多项式的简单运算数据结构课程设计.doc_第4页
第4页 / 共15页
多项式的简单运算数据结构课程设计.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《多项式的简单运算数据结构课程设计.doc》由会员分享,可在线阅读,更多相关《多项式的简单运算数据结构课程设计.doc(15页珍藏版)》请在三一文库上搜索。

1、一、课程设计目的数据结构是计算机专业的专业基础课,是一门实践性很强的课程,学生通过理论学习,并在完成每章后面的一些小程序后,理解了数据结构的基本概念,掌握了一些基本的编程技术,但仅有这一方面的训练还是很不够的。全面、严格的训练,是学好该课程的一个不可缺少的组成部分。课程设计对于提高学生用学到的书本知识解决实际问题,培养实际工作所需要的动手能力,对于提高以科学理论和工程上的技术,规范地开发大型、复杂、高质量的应用软件和系统软件具有关键性作用。通过课程设计的实践,学生可以在程序设计方法、上机操作等基本技能和科学作风方面受到比较系统和严格的训练。二、课程设计要求数据结构课程设计则要培养、训练学生选用

2、合适的数据结构并运用程序设计语言(C/C+)编写质量高的应用程序。并建立初步评价算法程序的能力。为编译技术、操作系统、数据库及算法设计与分析等后继课程的学习以及为应用软件特别是非数值应用软件的开发打下良好的理论基础和实践基础重点和难点: 1. 针对具体问题如何选择或设计合适的数据结构; 2. 如何根据一定的存储策略实现数据的存储表示; 3. 基于上述数据结构设计并实现完成具体要求的算法; 4. 对算法的时间性能进行分析。针对每一个设计题目写出1. 问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么? 2. 逻辑设计:对问题描述中涉

3、及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图;3. 详细设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作作出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架;4. 程序编码:把详细设计的结果进一步求精为程序设

4、计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;5. 程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;三、题目是“用C语言实现一元多项式的相加相减和相乘”1. 问题分析和任务定义: 用单链表的结构来存储多项式的信息是合适的。首先,一元多项式是必须在运行时动态决定创建的,单链表的动态分配内存空间能够很好的解决这个问题,从而避免了空间上浪费。其次,对于多项式的运算是以其每个节点为单位进行的,其排列可以根据多项式各个项式的

5、指数的不同,由高到低排列,其中对于指数相同的项进行系数的归并,是加减法的运算基础。2.逻辑设计: 一元多项式的每个项都有2个重要数据域,一是 系数 二是 指数 ,由于考虑到用链表的存储结构故而还要设计下一个节点的指针域 ,从而节点的结构体就这样形成了。 在创建链表时,为了便于对新开辟的节点进行赋值,所以在内存中开辟float 系数,int 指数 的暂存单元,它们连续从终端接受数据,并且覆盖上一次的数据,从而保证了输入的连续性。 链表在创建过程中以什么作为结束链表的创建的标志?这很重要,考虑到系数为0 ,该节点就没有意义,故而链表结束创建的标志 是 0 0,这样的节点会在插入的过程中自动删除。3

6、.详细设计:定义节点typedef struct node/定义节点类型 float coef; int expn; struct node * next; PLOY;创建链表void insert(PLOY *head,PLOY *inpt);PLOY *creat(char ch); /char ch 中的ch 则是多项式的字符标志,如f,g等,传入字符后,接下来就为其函数内的暂存单元赋数值,接着将创建的节点,调用insert 函数,将节点插入链表,继而返回链表的头指针输出链表void print(PLOY *fun) /此函数是根据实际的输出格式,对链表的信息进行加工后输出,由于考虑到如

7、果系数为正,直接输出就会缺少+号,而如果该系数为正且系链表的第一项就省略,另外就是,如果系数的绝对值为 1,就可以省略系数 1 ,直接输出符号链表的加操作PLOY *addPLOY(PLOY *head,PLOY *pre)/多项式相加,此原理就是将其中的一条链表的各个项,都用一个结构体单元拷贝后,调用insert 函数直接插入另外一条链表,从而返回该链表链表的减操作PLOY *minusPLOY(PLOY *head,PLOY *pre)/多项式相减,原理与加法相似,但是由于设计到号,在拷贝每个结构体单元后必须,在系数上加链表的乘操作PLOY *byPLOY(PLOY *head1,PLOY

8、 *head2)/多项式相乘,先从其中一个链表的第一项开始,依次去乘以另一个链表的每一项,并开辟新链表,插入每一项,直到全部乘完 4. 程序编码:#includeusing namespace std;typedef struct node/定义节点类型 float coef; int expn; struct node * next; PLOY; void start()/用户选择界面 couttt=endl; couttt 两个一元多项式的相加/相减,相乘:endl; couttt=endl; couttt请选择操作:endl; couttt0.退出endl; couttt1.两个一元多项

9、式相加endl; couttt2.两个一元多项式相乘endl; couttt3.两个一元多项式相减endl; couttt=next=NULL) pre-next=inpt; /如果只有头结点 ,就将待插入的节点,接上 else now=pre-next; /否则将now 指针指向第一个节点 while(signal=0) if(inpt-expnexpn)/指数小,往后插 if(now-next=NULL) /下一个节点没有 now-next=inpt; signal=1; else pre=now; now=pre-next; else if(inpt-expnnow-expn)/如果发现

10、比现在的链节大了就插入到这个连接的前面 inpt-next=now; pre-next=inpt; signal=1; else now-coef=now-coef+inpt-coef; /系数相加 signal=1; delete inpt;/释放 插入节点 if(now-coef=0) /系数等于0 pre-next=now-next; /删除该节点 delete now; PLOY *creat(char ch)/创建链表 PLOY *head,*inpt; float x; int y; /系数及指数的暂存单元head=new PLOY;/创建链表头 head-next=NULL; /

11、初始化链表cout请输入一元多项式ch:(格式是:系数 指数;以0 0 结束!)xy; /给暂存单元赋值while(x!=0) inpt=new PLOY;inpt-coef=x; inpt-expn=y; inpt-next=NULL; /以暂存单元的数值来创建一个节点insert(head,inpt);/将该节点插入链表中cout请输入一元多项式ch的下一项:(以0 0 结束!)xy; /给下一个节点的暂存单元赋值 return head; PLOY *addPLOY(PLOY *head,PLOY *pre)/多项式相加 PLOY *inpt; int flag=0; while(fla

12、g=0) if(pre-next=NULL) flag=1;/当指向空时跳出循环 else pre=pre-next; inpt=new PLOY;/创建新链节 inpt-coef=pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); /把当前g(x)的节点插入到y(x)中 return head; PLOY *minusPLOY(PLOY *head,PLOY *pre)/多项式相减 PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1;/当指向

13、空时跳出循环 else pre=pre-next; inpt=new PLOY;/创建新链节 inpt-coef=-pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); /否则把当前g(x)的节点插入到y(x)中 return head; PLOY *byPLOY(PLOY *head1,PLOY *head2)/多项式相乘 PLOY *inpt,*res,*pre; int flag=0; res=new PLOY; res-next=NULL;/初始化存放结果的链表 head1=head1-next; pre=he

14、ad2; while(flag=0) if(pre-next=NULL) pre=head2;/当现在指向空时跳出循环 head1=head1-next; continue; if(head1=NULL) flag=1;/当现在指向空时跳出循环 continue; pre=pre-next; inpt=new PLOY;/创建新链节 inpt-coef=pre-coef*head1-coef; inpt-expn=pre-expn+head1-expn; inpt-next=NULL; insert(res,inpt);/把当前g(x)的链节插入到y(x)中 return res; void

15、print(PLOY *fun)/输出多项式 PLOY *printing; /打印指针int flag=0; /打印完成的标志printing=fun-next;/给打印指针初始化,从第1个节点开始if(fun-next=NULL) cout0coef0 & fun-next!=printing) /如果打印项不是第1项,且系数大于0 printf(+);/先打印+号 ,因为正数不带+号 if(printing-coef!=1&printing-coef!=-1)/系数非1或-1的普通情况 printf(%f,printing-coef); if(printing-expn=1) print

16、f(X); else if(printing-expn!=0) printf(X%d,printing-expn); else /系数为1或者-1的情况 if(printing-coef=1) if(!printing-expn) printf(1); else if(printing-expn=1) printf(X); else printf(X%d,printing-expn); if(printing-coef=-1) if(!printing-expn) printf(-1); else if(printing-expn=1) printf(-X); else printf(-X%d

17、,printing-expn); if(printing-next=NULL) flag=1;else printing=printing-next; coutendl; void main() PLOY *f,*g; int sign=-1;/设置标志 start();coutsign;switch(sign) case 0: break;/退出 case 1: coutn你选择的操作是多项式相加:endl; f=creat(f);/输入多项式f(x) coutf(x)=; print(f); g=creat(g);/输入多项式g(x) coutg(x)=; print(g); coutF(

18、x)=f(x)+g(x)=; f=addPLOY(f,g);/两个多项式相加 print(f); sign=-1;/复位标志 start();/回复用户选择界面 break; case 2: cout你选择的操作是多项式相乘:endl; f=creat(f);/输入多项式f(x) coutf(x)=; print(f); g=creat(g);/输入多项式g(x) coutg(x)=; print(g); coutF(x)=f(x)*g(x)=; f=byPLOY(f,g);/两个多项式相乘 print(f); sign=-1;/复位标志 start();/回复用户选择界面 break; ca

19、se 3: cout你选择的操作是多项式相减:endl; f=creat(f);/输入多项式f(x) coutf(x)=; print(f); g=creat(g);/输入多项式g(x) coutg(x)=; print(g); coutF(x)=f(x)-g(x)=; f=minusPLOY(f,g);/两个多项式相减print(f); sign=-1;/复位标志 start();/回复用户选择界面 break; default: cout输入有误!请重新选择操作!endl;/选择错误,返回选择界面 start(); break; 5.程序调试与测试:四、总结 程序=算法+数据结构;通过本次的C+数据结构的实习,使我对于这句话的理解更加深刻,数据结构就像是建立一个数学模型,将现实世界的各种事物及现实问题抽象出来,并加以表示,使计算机能够按照人类的意愿,进行运算。而只有模型建立得合适,才能够简化计算。从而设计出高效,稳定的好程序。以上便是我对此次实习的最大理解。五、参考文献:1 王红梅,胡明,王涛编著.数据结构(C+版).北京.清华大学出版社,20072 王晓东编著.数据结构.北京.科学出版社,20023 郑莉等编著.C+程序设计教程.北京机械工业出版社,2001等15

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1