收藏 分享(赏)

数据结构课程设计-一元多项式计算器.doc

上传人:精品资料 文档编号:10744552 上传时间:2020-01-04 格式:DOC 页数:11 大小:179.68KB
下载 相关 举报
数据结构课程设计-一元多项式计算器.doc_第1页
第1页 / 共11页
数据结构课程设计-一元多项式计算器.doc_第2页
第2页 / 共11页
数据结构课程设计-一元多项式计算器.doc_第3页
第3页 / 共11页
数据结构课程设计-一元多项式计算器.doc_第4页
第4页 / 共11页
数据结构课程设计-一元多项式计算器.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、实习 1、一元稀疏多项式计算器一、 需求分析1. 问题描述设计一个一元稀疏多项式简单计算器。2. 基本要求一元稀疏多项式简单计算器的基本功能是:(1)输入并建立多项式。(2)输出多项式,输出形式为整数序列:n, c1, e1, c2, e2, ,cn, en ,其中 n是多项式的项数,c i,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+

2、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.抽象数据类型一元多项式定义为:ATD

3、Ploynomial数据对象:D=ai|aiTermset, i=1,2,3,m,m0 Termset 中的每个元素包含一个表示系数的实数和表示指数的整数数据关系:R1=ai-1,aiD,且 ai-1 中的指数#include#define maxlen 10#define large 999typedef struct Linklistomialfloat coef;int expn;struct Linklistomial *next;Linklistomial,*Linklist;/结点类型,指针类型void Insert(Linklist p,Linklist h)/ h 已存在插入

4、p 项if(p-coef=0)free(p);/系数为 0 的话释放结点elseLinklist q1,q2;q1=h;q2=h-next;while(q2q2=q2-next;if(q2free(p);if(!q2-coef)/系数为 0 的话释放结点q1-next=q2-next;free(q2);else /指数为新时将结点插入p-next=q2;q1-next=p; Linklist CreateLinklist(Linklist head,int m)/建立一个头指针为 head、项数为 m 的一元多项式int i;Linklist p;p=head=(Linklist)malloc

5、(sizeof(struct Linklistomial);head-next=NULL;for(i=0;icoef,Insert(p,head); /调用 Insert 函数插入结点return head;void DestroyLinklist(Linklist p)/销毁多项式 pLinklist D1,D2;D1=p;while(D1)D2=D1-next;free(D1);D1=D2;void PrintLinklist(Linklist P)/输出一元多项式 pLinklist q=P-next;int flag=1; /项数计数器if(!q) /若多项式为空,输出 0putcha

6、r(0);printf(“n“);return;while(q)if(q-coef0 /系数大于 0 且不是第一项if(q-coef!=1if(q-expn=1) putchar(X);else if(q-expn) printf(“X%d“,q-expn);elseif(q-coef=1)if(!q-expn)putchar(1);else if(q-expn=1)putchar(X);elseprintf(“X%d“,q-expn);if(q-coef=-1)if(!q-expn)printf(“-1“);else if(q-expn=1)printf(“-X“);elseprintf(“

7、-X%d“,q-expn);q=q-next;flag+;printf(“n“);int Compare(Linklist a,Linklist b)/比较 a,b 中 x 的指数的大小if(aelse if(!a|a-expnexpn)return -1;elsereturn 0;else if(!aelse/b 多项式已空,但 a 多项式非空return 1;Linklist AddLinklist(Linklist pa,Linklist pb)/求解并建立多项式 a+b,返回其头指针Linklist qa=pa-next;Linklist qb=pb-next;Linklist hea

8、dc,hc,qc;hc=(Linklist)malloc(sizeof(struct Linklistomial);/建立头结点hc-next=NULL;headc=hc;while(qa|qb)qc=(Linklist)malloc(sizeof(struct Linklistomial);switch(Compare(qa,qb)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

9、ase -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 时,释放该结点return headc;Linklist SubtractionLinklist(Linklist Sa,Linklist Sb)/求解并建立多项式 a-b,返回其头指针Linklist Cb=Sb-next;while(Cb)Cb-coef=(-1)*Cb-coef;Cb=Cb-next;return AddLinklist(S

10、a,Sb);int main()int m,n,a=1;char flag;Linklist pa=0,pb=0,pc;printf(“ 欢迎使用一元多项式加法器nn“);/ 输出菜单printf(“ *n“);printf(“ * 一元多项式简单运算器 *n“);printf(“ * *n“);printf(“ * A: 输入多项式 a B: 输入多项式 b *n“);printf(“ * *n“);printf(“ * C: 输出多项式 a D: 输出多项式 b *n“);printf(“ * *n“);printf(“ * E: 输出 a+b F: 输出 a-b *n“);printf(

11、“ * *n“);printf(“ * G: 使用完毕! *n“);printf(“ *n“);while(a)printf(“n 请选择操作:“);scanf(“ %c“,/空格符号一定要注意switch(flag)caseA:casea:printf(“下面进行多项式 a 的输入: n“);printf(“请输入 a 的项数:“);scanf(“%d“,pa=CreateLinklist(pa,m);/建立多项式 abreak;caseB:caseb:printf(“下面进行多项式 b 的输入:n“);printf(“请输入 b 的项数:“);scanf(“%d“,pb=CreateLin

12、klist(pb,n);/建立多项式 bbreak;caseC:casec:printf(“n 多项式 a=“);PrintLinklist(pa);break;caseD:cased:printf(“n 多项式 b=“);PrintLinklist(pb);break;caseE:casee:pc=AddLinklist(pa,pb);printf(“n a+b=“);PrintLinklist(pc);break;caseF:casef:pc=SubtractionLinklist(pa,pb);printf(“n a-b=“);PrintLinklist(pc);break;caseG:caseg:DestroyLinklist(pa);DestroyLinklist(pb);a=0;printf(“n 欢迎下次使用!n“);break;default:printf(“n 您的选择错误,请重新选择!n“);return 0;四、调试分析编译环境为 CodeBlocks。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报