1、指数expn指针域next运用尾插法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyn p中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。为了实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项,由此得到下列运算规则: 若p-expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 若p-expn=q-expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 若p-expnexpn,则结点q所指的结点应是“和多项
2、式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。二、概要设计为实现上述程序的功能,应以带头结点的单链表表示多项式。为此,需要一个抽象数据类型:单链表。2.1单链表的抽象数据类型定义ADT LinkList数据对象:D=ai|aiTermSet,i=1,2,m,m0 TermSet中的每个元素包含一个表示系数的实数和表示指数的整数数据关系:R1=ai-1,aiD且ai-1中的指数值next=null;return ture;void FreeNode(LinkList & /释放p所指结点free(q1); q1=q2; q2=q2-next;3.2单链表的基本操作设置如下
3、:void Insert(LinkList p,LinkList h); /将节点p插入到多项式链表hLinkList CreateLinkList(LinkList head,int m);/建立一个头指针为head、项数为m的一元多项式,并返回该多项式的头结点;/若分配空间失败,则返回FALSEvoid DestroyLinkList(LinkList p);/销毁多项式pvoid PrintLinkList(LinkList P);/输出构造的一元多项式PStatus compare(LinkList a,LinkList b) /节点进行比较: a的指数 b的指数 return 1;
4、a的指数=b的指数 return 0;a的指数next=NULL; for(i=0;ib-expn) return 1; else if(!a|a-expn) return -1; else return 0;a&b) return -1;/a多项式已空,但b多项式非空 else return 1;/b多项式已空,但a多项式非空/ comparefloat ValueLinkList(LinkList head,int x) /输入x值,计算并返回多项式的值 for(p=head-p;p=p-next) t=1; for(i=p-expn;i!=0;) / i 为指数的系数 pow(x,i)
5、if(icoef*t; return sum;/ ValueLinkListLinkList MultiplyLinkList(LinkList pa,LinkList pb)/求解并建立多项式a*b,返回其头指针 LinkList qa=pa- LinkList qb=pb- hf=(LinkList)malloc(sizeof(struct LNode);/建立头结点 hf- for(;qa;qa=qa-next) for(qb=pb-qb;qb=qb-next) pf=(LinkList)malloc(sizeof(struct LNode); pf-coef=qa-coef*qb-co
6、ef;expn=qa-expn+qb- Insert(pf,hf); /调用Insert函数以合并指数相同的项return hf;/ MultiplyLinkList3.3主函数和其他函数的伪码算法void main()/主函数Initiation(); /多项式初始化 PrintCommand();/输出菜单 while(1) /循环一直为真 知道选择j|J即退出命令时,程序退出n请选择操作:);%cflag); Interpter(flag); /具体的操作命令/mainvoid Initiation()请输入a的项数:%dm); pa=CreateLinkList(pa,m);/建立多项式a请输入b的项数:n); pb=CreateLinkList(pb,n);/建立多项式bprintf(多项式已创建n/ Initiationvoid PrintCommand() /输出菜单显示键入命令的提示信息;Printf(A,B,C,D,E);/ PrintCommandvoid Interpter(char flag) switch(flag) case A: case a PrintLinkList(pa); break;case Bb PrintLinkList(pb);caseC casec AddLinkList(pa,pb)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1