




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1.绪论21.1 前言21.2 问题的提出22.课程设计目的33.需求分析43.1 功能分析43.2 设计思路44.概要设计5数据结构的选用5多项式的输入5主函数和其它函数55.流程图设计6函数调用关系6程序流程图76.程序代码87.调试运行158.总结17参考文献18 摘要在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象数据元素以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。在许多类型的程序的设计中,数据结构的选择是一个根本的设计考虑因素。许多大型系统的构造经验说明,系统实现的困难程度和系统构造的质量都严重的依赖于是
2、否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不管哪种情况,选择适宜的数据结构都是非常重要的。选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。经过一学期的学习我对数据结构的知识有所了解,运用我所学的知识来完成这个课程设计。采用C语言编写,在对于多项式的存储和计算操作中大量依赖于指针和结构体。通过尾插法建立链表,指数的比拟来实现结点元素的相加减。关键字 数据结构 多项式 链表 指针 结构体 1.1
3、前言 算机的应用已渗透到社会的各个领域,正在改变着人们的工作、学习和生活的方式,推动着社会的开展。归纳起来可分为以下几个方面:如科学计算(数值计算)、数据处理(信息处理)、自动控制、计算机辅助、人工智能、多媒体应用、计算机网络本系统用C语言作为程序语言,设计出的系统功能完善,操作方便灵活。1.2 问题的提出 一元稀疏多项式简单计数器根本功能要求:(1)输入并建立多项式(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列。(3)多项式a和b相加,建立多项式a+b,输出相加的多项式。(4)多项式a和
4、b相减,建立多项式a-b,输出相减的多项式。用带表头结点的单链表存储多项式。使我们进一步理解和掌握课堂上所学各种根本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。使我们掌握软件设计的根本内容和设计方法,并培养学生进行标准化软件设计的能力。使我们掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的根本能力。熟练掌握数据结构这门课程,掌握线性表、栈、队列、串、数组、广义表、树和二叉树以及图等根本类型的数据结构及其应用.进一步熟悉抽象数据类型的定义和实现、如何利用数组的动态分酚实现顺序结构、继承的实现方式。学会分析研究计算机加工的数据结构的特性,以便为应用涉及的
5、数据选择适当的逻辑结构、想念结构及基相应的算法并初步掌握算法的时间分析和空间分析的技术。根本掌握程序设计的根本思路和方法。利用所学的根本知识和技能,解决简单的程序设计问题各算法描述培养我们的数据抽象能力。3.1 功能分析 本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。3.2 设计思路采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b。为实现处理,社p、q分别指向单链表polya和polyb的当前项,比拟p、q结点的指数项。 假设p->expn<q->e
6、xpn,那么结点p所指的结点应是“和多项式中的一项,令指针p后移。 假设p->expn=q->expn,那么将两个结点中的系数相加,当和不为0时修改结点p的系数。 假设p->expn>q->expn,那么结点q所指的结点应是“和多项式中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。typedef struct Polynomial float coef; /系数 int expn; /指数 struct Polynomial *next;*Polyn,Polynomial; Polyn CreatePolyn(Polyn head,int m)
7、. for(i=0;i<m;i+) p=(Polyn)malloc(sizeof(struct Polynomial); printf("请输入第%d项的系数与指数:",i+1); scanf("%f %d",&p->coef,&p->expn); Insert(p,head); return head; void main() int m,n,a,x; char flag; Polyn pa=0,pb=0,pc; void DestroyPolyn(Polyn p) void PrintPolyn(Polyn P)in
8、t compare(Polyn a,Polyn b)Polyn AddPolyn(Polyn pa,Polyn pb)Polyn SubtractPolyn(Polyn pa,Polyn pb)#include<stdio.h>#include<malloc.h>typedef struct Polynomial/项的表示 float coef; /系数 int expn; /指数 struct Polynomial *next; /指针域*Polyn,Polynomial; /Polyn为结点指针类型void Insert(Polyn p,Polyn h) /插入或者
9、合并 if(p->coef=0) free(p); /系数为0的话释放结点 else Polyn q1,q2; q1=h;q2=h->next; while(q2&&p->expn<q2->expn) /查找插入位置p与h项一次比拟指数 q1=q2; q2=q2->next; if(q2&&p->expn=q2->expn) /将指数相同相合并 q2->coef+=p->coef; free(p); if(!q2->coef) /系数为0的话释放结点 q1->next=q2->next
10、; free(q2); else /指数为新时将结点插入即p->expn>q2expn情况 p->next=q2; q1->next=p; /InsertPolyn CreatePolyn(Polyn head,int m)/建立一个头指针为head、项数为m的一元多项式 int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial); head->next=NULL; for(i=0;i<m;i+) p=(Polyn)malloc(sizeof(struct Polynomial); /建立新结
11、点以接收数据 printf("请输入第%d项的系数与指数:",i+1); scanf("%f %d",&p->coef,&p->expn); Insert(p,head); /调用Insert函数插入结点 return head;/CreatePolynvoid DestroyPolyn(Polyn p) /销毁多项式p Polyn q1,q2; q1=p->next; q2=q1->next; while(q1->next) free(q1); /释放q1 q1=q2;/指针后移,循环继续释放,直至销毁 q
12、2=q2->next; void PrintPolyn(Polyn P) /输出多项式 Polyn q=P->next; int flag=1; /项数计数器 if(!q) /假设多项式为空,输出0 putchar('0'); printf("n"); return; while (q) if(q->coef>0&&flag!=1) putchar('+'); /系数大于0且不是第一项 if(q->coef!=1&&q->coef!=-1)/系数非1或-1的普通情况 prin
13、tf("%g",q->coef); if(q->expn=1) putchar('X');/系数为1的情况 else if(q->expn) printf("X%d",q->expn); else if(q->coef=1) if(!q->expn) putchar('1'); else if(q->expn=1) putchar('X'); else printf("X%d",q->expn); if(q->coef=-1) if(
14、!q->expn) printf("-1"); else if(q->expn=1) printf("-X"); else printf("-X%d",q->expn); q=q->next; flag+; /while printf("n");/PrintPolynint compare(Polyn a,Polyn b) if(a&&b) if(!b|a->expn>b->expn) return 1; else if(!a|a->expn<b
15、->expn) return -1; else return 0; else if(!a&&b) return -1;/a多项式已空,但b多项式非空 else return 1;/b多项式已空,但a多项式非空/comparePolyn AddPolyn(Polyn pa,Polyn pb)/求解并建立多项式a+b,返回其头指针 Polyn qa=pa->next; Polyn qb=pb->next; Polyn headc,hc,qc; hc=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点 hc->next
16、=NULL; headc=hc; while(qa|qb) qc=(Polyn)malloc(sizeof(struct Polynomial); switch(compare(qa,qb)/调用compare返回值 case 1: qc->coef=qa->coef; qc->expn=qa->expn; qa=qa->next; break; case 0: qc->coef=qa->coef+qb->coef; qc->expn=qa->expn; qa=qa->next; qb=qb->next; break; c
17、ase -1: qc->coef=qb->coef; qc->expn=qb->expn; qb=qb->next; break; /switch if(qc->coef!=0) qc->next=hc->next; hc->next=qc; hc=qc; else free(qc);/当相加系数为0时,释放该结点 /while return headc;/AddPolynPolyn SubtractPolyn(Polyn pa,Polyn pb)/求解并建立多项式a-b,返回其头指针 Polyn h=pb; Polyn p=pb->
18、next; Polyn pd; while(p) /将pb的系数取反 p->coef*=-1; p=p->next; pd=AddPolyn(pa,h); for(p=h->next;p;p=p->next) /恢复pb的系数 p->coef*=-1; return pd;/SubtractPolynint main()/主函数 int m,n,flag=0; float x; Polyn pa=0,pb=0,pc,pd,pe,pf;/定义各式的头指针,pa与pb在使用前付初值NULL printf("请输入a的项数:"); scanf(&qu
19、ot;%d",&m); pa=CreatePolyn(pa,m);/建立多项式a printf("请输入b的项数:"); scanf("%d",&n); pb=CreatePolyn(pb,n);/建立多项式a /输出菜单 printf("*n"); printf("操作提示:nt1.输出多项式a和bnt2.建立多项式a+bnt3.建立多项式a-bnt4.退出n"); for(;flag=0) printf("执行操作"); scanf("%d",&
20、amp;flag); if(flag=1)/输出多项式 printf("多项式a:");PrintPolyn(pa); printf("多项式b:");PrintPolyn(pb);continue; if(flag=2)/多项式相加 pc=AddPolyn(pa,pb); /调用函数,实现相加 printf("多项式a+b:");PrintPolyn(pc); DestroyPolyn(pc);continue; if(flag=3)/多项式相减 pd=SubtractPolyn(pa,pb); printf("多项式a-b:");PrintPolyn(pd); DestroyPolyn(pd);continue; if(flag=4) break; /结束循环,退出 Destro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备员岗位管理办法
- 2025年新闻采辑项目发展计划
- 礼服馆档期管理办法
- 中山科技资金管理办法
- 西兰花后期管理办法
- 中建商务人员管理办法
- 终端开发与管理办法
- 考勤管理办法工伤假
- 装备指标采购管理办法
- 上海度假营地管理办法
- JJF 2250-2025 数字化交流电能表型式评价大纲
- 2025年-北京语言大学社会和应届生事业编制人员公招聘考试笔试试卷附答案
- 做账实操-无人机关联行业的账务处理分录
- 空间数据不确定性分析-第2篇-洞察及研究
- 文化设计符号解析-洞察及研究
- 2025年湖北省中考英语试卷真题(含答案解析)
- 中医适宜技术的临床应用讲课件
- 脊柱侧凸矫形术麻醉管理
- 质量工作痕迹管理制度
- 输血反应急救流程
- IPV6组网技术 教案1 了解IPv6技术发展历史
评论
0/150
提交评论