数据结构课程设计-一元多项式计算器_第1页
数据结构课程设计-一元多项式计算器_第2页
数据结构课程设计-一元多项式计算器_第3页
数据结构课程设计-一元多项式计算器_第4页
数据结构课程设计-一元多项式计算器_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计-一元多项式计算器请浏览后下载,资料供参考,期待您的好评与关注!请浏览后下载,资料供参考,期待您的好评与关注!请浏览后下载,资料供参考,期待您的好评与关注!实习1、一元稀疏多项式计算器需求分析1.问题描述设计一个一元稀疏多项式简单计算器。2.基本要求一元稀疏多项式简单计算器的基本功能是:(1)输入并建立多项式。(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,········,cn,en,其中n是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排列。(3)多项式a和b想加,建立多项式a+b。(4)多项式a和b想减,建立多项式a-b。3.测试数据(1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7)(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9+12x-3-x)(3)(1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5)(4)(x+x3)+(-x-x3)=0(5)(x+x100)+(x100+x200)=(x+2x100+x200)(6)(x+x2+x3)+0=(x+x2+x3)(7)互换测试数据的前后两个多项式。4.实现提示用带表头结点的单链表存储多项式。二、概要设计为实现上述程序功能,应用带头结点的单链表存储多项式。为此需要一个抽象数据类型:一元多项式。1.抽象数据类型一元多项式定义为:ATDPloynomial{数据对象:D={ai|ai∈Termset,i=1,2,3···,m,m≥0Termset中的每个元素包含一个表示系数的实数和表示指数的整数}数据关系:R1={<ai-1,ai>ai-1,ai∈D,且ai-1中的指数<ai中的指数的值,i=1,2,3···n}基本操作:Insert(p,h)初始条件:h已存在。操作结果:插入p项。CreateLinklist(head,m)操作结果:建立一个头指针为head、项数为m的一元多项式。DestroyLinklist(p)初始条件:一元多项式p已存在。操作结果:销毁一元多项式p。数据结构课程设计-一元多项式计算器全文共11页,当前为第1页。PrintLinklist(P)数据结构课程设计-一元多项式计算器全文共11页,当前为第1页。初始条件:一元多项式p已存在。操作结果:输出一元多项式p。Compare(a,b)初始条件:项a,b已存在。操作结果:比较a,b中x的指数的大小。AddLinklist(pa,pb)初始条件:一元多项式pa,pb已存在。操作结果:完成一元多项式pa,pb的相加运算。SubtractionLinklist(Sa,Sb)初始条件:一元多项式Sa,Sb已存在。操作结果:完成一元多项式Sa,Sb的相减运算。}ATDPloynomial三、详细设计(源代码)(使用C语言)#include<stdio.h>#include<malloc.h>#definemaxlen10#definelarge999typedefstructLinklistomial{floatcoef;intexpn;structLinklistomial*next;}Linklistomial,*Linklist;//结点类型,指针类型voidInsert(Linklistp,Linklisth){//h已存在插入p项if(p->coef==0)free(p);//系数为0的话释放结点else{Linklistq1,q2;q1=h;q2=h->next;while(q2&&p->expn<q2->expn){//查找插入位置q1=q2;q2=q2->next;}if(q2&&p->expn==q2->expn){//将指数相同相合并数据结构课程设计-一元多项式计算器全文共11页,当前为第2页。数据结构课程设计-一元多项式计算器全文共11页,当前为第2页。free(p);if(!q2->coef){//系数为0的话释放结点q1->next=q2->next;free(q2);}}else{//指数为新时将结点插入p->next=q2;q1->next=p;}}}LinklistCreateLinklist(Linklisthead,intm){//建立一个头指针为head、项数为m的一元多项式inti;Linklistp;p=head=(Linklist)malloc(sizeof(structLinklistomial));head->next=NULL;for(i=0;i<m;i++){p=(Linklist)malloc(sizeof(structLinklistomial));//建立新结点以接收数据printf("请输入第%d项的系数与指数:",i+1);scanf("%f%d",&p->coef,&p->expn);Insert(p,head);//调用Insert函数插入结点}returnhead;}voidDestroyLinklist(Linklistp){//销毁多项式pLinklistD1,D2;D1=p;while(D1){D2=D1->next;free(D1);D1=D2;}}voidPrintLinklist(LinklistP){//输出一元多项式p数据结构课程设计-一元多项式计算器全文共11页,当前为第3页。数据结构课程设计-一元多项式计算器全文共11页,当前为第3页。intflag=1;//项数计数器if(!q){//若多项式为空,输出0putchar('0');printf("\n");return;}while(q){if(q->coef>0&&flag!=1)putchar('+');//系数大于0且不是第一项if(q->coef!=1&&q->coef!=-1){//系数非1或-1的普通情况printf("%g",q->coef);if(q->expn==1)putchar('X');elseif(q->expn)printf("X^%d",q->expn);}else{if(q->coef==1){if(!q->expn)putchar('1');elseif(q->expn==1)putchar('X');elseprintf("X^%d",q->expn);}if(q->coef==-1){if(!q->expn)printf("-1");elseif(q->expn==1)printf("-X");elseprintf("-X^%d",q->expn);}}q=q->next;flag++;}printf("\n");}数据结构课程设计-一元多项式计算器全文共11页,当前为第4页。数据结构课程设计-一元多项式计算器全文共11页,当前为第4页。{//比较a,b中x的指数的大小if(a&&b){if(!b||a->expn>b->expn)return1;elseif(!a||a->expn<b->expn)return-1;elsereturn0;}elseif(!a&&b)//a多项式已空,但b多项式非空return-1;else//b多项式已空,但a多项式非空return1;}LinklistAddLinklist(Linklistpa,Linklistpb){//求解并建立多项式a+b,返回其头指针Linklistqa=pa->next;Linklistqb=pb->next;Linklistheadc,hc,qc;hc=(Linklist)malloc(sizeof(structLinklistomial));//建立头结点hc->next=NULL;headc=hc;while(qa||qb){qc=(Linklist)malloc(sizeof(structLinklistomial));switch(Compare(qa,qb)){case1:{qc->coef=qa->coef;qc->expn=qa->expn;qa=qa->next;break;}case0:{qc->coef=qa->coef+qb->coef;qc->expn=qa->expn;qa=qa->next;qb=qb->next;break;数据结构课程设计-一元多项式计算器全文共11页,当前为第5页。数据结构课程设计-一元多项式计算器全文共11页,当前为第5页。case-1:{qc->coef=qb->coef;qc->expn=qb->expn;qb=qb->next;break;}}if(qc->coef!=0){qc->next=hc->next;hc->next=qc;hc=qc;}elsefree(qc);//当相加系数为0时,释放该结点}returnheadc;}LinklistSubtractionLinklist(LinklistSa,LinklistSb){//求解并建立多项式a-b,返回其头指针LinklistCb=Sb->next;while(Cb){Cb->coef=(-1)*Cb->coef;Cb=Cb->next;}returnAddLinklist(Sa,Sb);}intmain(){intm,n,a=1;charflag;Linklistpa=0,pb=0,pc;printf("欢迎使用一元多项式加法器\n\n");//输出菜单printf("*******************************************************\n");printf("*一元多项式简单运算器*\n");printf("**\n");printf("*A:输入多项式aB:输入多项式b*\n");printf("**\n");数据结构课程设计-一元多项式计算器全文共11页,当前为第6页。printf("*C:输出多项式a数据结构课程设计-一元多项式计算器全文共11页,当前为第6页。printf("**\n");printf("*E:输出a+bF:输出a-b*\n");printf("**\n");printf("*G:使用完毕!*\n");printf("*******************************************************\n");while(a){printf("\n请选择操作:");scanf("%c",&flag);//空格符号一定要注意switch(flag){case'A':case'a':{printf("下面进行多项式a的输入:\n");printf("请输入a的项数:");scanf("%d",&m);pa=CreateLinklist(pa,m);//建立多项式abreak;}case'B':case'b':{printf("下面进行多项式b的输入:\n");printf("请输入b的项数:");scanf("%d",&n);pb=CreateLinklist(pb,n);//建立多项式bbreak;}case'C':case'c':{printf("\n多项式a=");PrintLinklist(pa);break;}case'D':case'd':{printf("\n多项式b=");PrintLinklist(pb);break;}数据结构课程设计-一元多项式计算器全文共11页,当前为第7页。数据结构课程设计-一元多项式计算器全文共11页,当前为第7页。case'e':{pc=AddLinklist(pa,pb);printf("\na+b=");PrintLinklist(pc);break;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论