数据结构多项式求和实验报告.pdf
1.实验题目设计一种用单链表存储多项式的结构 (每个结点存储一项的系数和指数, 类型都为int) ,并编写一个产生多项式链表的函数和一个实现两个多项式相加的函数。2 .实验内容顺序存储结构的实现。先输入多项式最高项数,然后按照(系数,指数)的格式输入顺序表类型定义如下:typedef struct termint coef;int expn;struct term *next;term,*Polynomial;3实验要求(1) 利用C语言完成算法设计和程序设计。(2)上机调试通过实验程序。(3)输入数据,检验程序运行结果。(4)给出具体的算法分析,包括时间复杂度和空间复杂度。(5)撰写实验报告。4.实验步骤与源程序 实验步骤首先分析实验内容,要实现多项式求和,必须创建两个函数, 然后先建立一个多项式a 和多项式 b,接着输入每个多项式的系数和指数,再实现多项式a 和 b 的求和将求出的多项式放在多项式 a 中,最后输出求出的多项式的结果。 源代码源代码#include#include#include#include#include#include#include#include#include/*#include/*定义存储结构,用单链表存储多项式,链表中每个结点存储多定义存储结构,用单链表存储多项式,链表中每个结点存储多项式中的一项。项式中的一项。*/*/typedef struct termtypedef struct term int coef;/int coef;/定义多项式系数为定义多项式系数为 coefcoefint expn;/int expn;/定义多项式指数为定义多项式指数为 expnexpnstruct term *next;struct term *next;term,*Polynomial;term,*Polynomial;void Create_Polynomial(Polynomial *P,int n)void Create_Polynomial(Polynomial *P,int n) /* /*建立多项式建立多项式*/*/int i;int i;term *t1,*t2;term *t1,*t2;(*P)=(term *)malloc(sizeof(term);(*P)=(term *)malloc(sizeof(term);(*P)-coef=0;(*P)-coef=0;(*P)-expn=0;(*P)-expn=0;(*P)-next=NULL;(*P)-next=NULL;t1=(*P);t1=(*P);for(i=0;i=n;i+)for(i=0;icoef),&(t2-expn);scanf(%d,%d,&(t2-coef),&(t2-expn);t1-next=t2;t1-next=t2;t1=t1-next;t1=t1-next;t2-next=NULL;t2-next=NULL;void Add_Polynomial(Polynomial *a,Polynomial *b)void Add_Polynomial(Polynomial *a,Polynomial *b) /* /*多项式多项式 a a 和多项式和多项式 b b 求和,结果求和,结果存放在存放在 a a 中。中。*/*/term *t1,*t2,*ha,*hb;term *t1,*t2,*ha,*hb;ha=(*a);ha=(*a);hb=(*b);hb=(*b);t1=ha-next;t1=ha-next;t2=hb-next;t2=hb-next;while(t1!=NULL&t2!=NULL)while(t1!=NULL&t2!=NULL) if(t1-expnt2-expn)if(t1-expnt2-expn) hb-next=t2-next;hb-next=t2-next;t2-next=t1;t2-next=t1;ha-next=t2;ha-next=t2;ha=ha-next;ha=ha-next; else if(t1-expn=t2-expn)else if(t1-expn=t2-expn) else if(t1-expnexpn)else if(t1-expnexpn) ha=ha-next;ha=ha-next;t1=t1-next;t1=t1-next;t1-coef+=t2-coef;t1-coef+=t2-coef;hb-next=t2-next;hb-next=t2-next;free(t2);free(t2);ha=ha-next;ha=ha-next;t1=t1-next;t1=t1-next;t2=hb-next;t2=hb-next;if(t2!=NULL)if(t2!=NULL) ha-next=t2;ha-next=t2;free(hb);free(hb); void Output(Polynomial L)void Output(Polynomial L) void main()void main() Polynomial La,Lb;Polynomial La,Lb;int n,m;int n,m;printf(printf(请输入多项式请输入多项式 A A 的非零项的个数的非零项的个数:n);:n);scanf(%d,&n);scanf(%d,&n);printf(printf( 请输入多项式请输入多项式 A A 的各项的各项( (格式格式: :系数系数, ,指数指数):n);):n);Create_Polynomial(&La,n);Create_Polynomial(&La,n);printf(printf(多项式多项式 A A 为为:);:);Output(La);Output(La);printf(n);printf(n);printf(printf(请输入多项式请输入多项式 B B 的非零项的个数的非零项的个数:n);:n);L=L-next;L=L-next;while(L!=NULL)while(L!=NULL) printf(%dX%d,L-coef,L-expn);printf(%dX%d,L-coef,L-expn);L=L-next;L=L-next;if(L!=NULL)printf(+);if(L!=NULL)printf(+); scanf(%d,&m);scanf(%d,&m);printf(printf( 请输入多项式请输入多项式 B B 的各项的各项( (格式格式: :系数系数, ,指数指数):n);):n);Create_Polynomial(&Lb,m);Create_Polynomial(&Lb,m);printf(printf(多项式多项式 B B 为为:);:);Output(Lb);Output(Lb);printf(n);printf(n);printf(n);printf(n);Add_Polynomial(&La,&Lb);Add_Polynomial(&La,&Lb);printf(printf(多项式求和的结果为多项式求和的结果为:n);:n);printf(A+B=);printf(A+B=);Output(La);Output(La);printf(n);printf(n);5测试数据与实验结果6.结果分析与实验体会程序成功运行,实验后边有点不清楚,不知道怎么弄。当我刚刚看到题目,给我的感觉即使这个题目很难。但经过思考和问同学,根据题目的提示,定义了顺序表数据结构类型,在两个函数中,我首先构建的是创建多项式的函数。然后创建 a 和 b 两个函数,然后实现多项式的相加。虽然编写的时候碰到了很多错误,但经过了多次的修改,最终总算把程序修改到能够运行了,通过这次了编写让我对函数的调用得到了更深的了解。