一元多项式相加实验报告一元多项式的相加一实验内容根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加二需求分析1掌握线性结构的逻辑特性和物理特性。2建立一元多项式。3将一元多项式输入,并存储在内存中,并按照指数降序排列输出多项式。4能够完成两个多项式的加减运算,并输出结果。三概要设计1本程序所用到的抽象数据类型:typedefOrderedLinkListpolynomial;//用带表头结点的有序链表表示多项式结点的数据元素类型定义为:typedefstruct{//项的表示floatcoef;//系数intexpn;//指数term,ElemType;VoidAddPolyn(polynomail&Pa,polynomail&Pb)PositionGetHead()PositionNextPos(LinkListL,Linkp)ElemGetCurElem(Linkp)intcmp(termatermb)StatusSetCurElem(Link&p,ElemTypee)StatusDelFirst(Linkh,Link&q)StatusListEmpty(LinkListL)StatusAppend(LinkList&L,LinkS)FreeNode()2存储结构一元多项式的表示在计算机内用链表来实现,同时为了节省存储空间,只存储其中非零的项,链表中的每个节点存放多项式的系数非零项。它包含三个域,分别存放多项式的系数,指数,以及指向下一个项的指针。序数coef指数exp指针域next创建一元多项式链表,对运算中可能出现的各种情况进行分析,实现一元多项式的相加相减操作。3模块划分a)主程序;2)初始化单链表;3)建立单链表;4)相加多项式4主程序流程图四详细设计根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项,对开始申请结点空间输入多项式各项的系数X,指数Y输出已输出的多项式合并同类项结束是否输入正确否于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去。核心算法PolyAdd是把分别由pa和pb所指的两个多项式相加,结果为pa所指的多项式。运算规则如下:相加时,首先设两个指针变量qa和qb分别从多项式的首项开始扫描(见图2-5-1),比较qa和qb所指结点指数域的值,可能出现下列三种情况之一:(1)qa->exp大于qb->exp,则qa继续向后扫描。(2)qa->exp等于qb->exp,则将其系数相加。若相加结果不为零,将结果放入qa->coef中,并删除qb所指结点,否则同时删除qa和qb所指结点。然后qa、qb继续向后扫描。(3)qa->exp小于qb->exp,则将qb所指结点插入qa所指结点之前,然后qa、qb继续向后扫描。扫描过程一直进行到qa或qb有一个为空为止,然后将有剩余结点的链表接在结果表上。所得pa指向的链表即为两个多项式之和。五源程序代码#include#include#include#defineNULL0typedefstructNODE{floatcoef;//系数intexpn;//指数structNODE*next;}NODE;NODE*Creat(intn);voidprint(NODE*head);NODE*AddPolyn(NODE*head1,NODE*head2);NODE*Delfirst(NODE*head,NODE*q);voidInsertBefore(NODE*p1,NODE*p2);intcompare(inta,intb);main(){NODE*head1,*head2,*head3;intn1,n2;printf("请输入你需要的多项数的数目n1:");scanf("%d",&n1);head1=Creat(n1);printf("第一个多项式的显示:\n");print(head1);printf("\n请输入你需要的多项数的数目n2:");scanf("%d",&n2);head2=Creat(n2);printf("\n第二个多项式的显示:\n");print(head2);head3=AddPolyn(head1,head2);printf("\n合并后的多项式的显示:\n");print(head3);printf("\n");}/*创建链表*/NODE*Creat(intn){NODE*current,*previous,*head;inti;head=(NODE*)malloc(sizeof(NODE));/*创建头结点*/previous=head;for(i=0;icoef,¤t->expn);previous->next=current;previous=current;}previous->next=NULL;returnhead;}/*一元多项式的想加,总体考虑,可分qa的指数比qb小,或等于pb(如果系数相加等于0和不等于0),或大于pb里面由InsertBefore和Delfirst两个小模块组成一部分*/NODE*AddPolyn(NODE*head1,NODE*head2){NODE*ha,*hb,*qa,*qb;inta,b;floatsum;ha=head1;/*ha和hb指向头结点*/hb=h...