数据结构 实验2 多项式求和_第1页
数据结构 实验2 多项式求和_第2页
数据结构 实验2 多项式求和_第3页
数据结构 实验2 多项式求和_第4页
数据结构 实验2 多项式求和_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、 算法设计与分析 实验报告 - 7 -1、 实验目的(1) 掌握线性表的顺序存储结构和链式存储结构;(2) 掌握线性表插入、删除等基本运算;(3) 掌握线性表的典型运用多项式求和。2、 实验内容编程实现多项式的求和运算:(1) 顺序存储结构的实现例如,已知:f(x)=8x6+5x5-10x4+32x2-x+10,g(x)=7x5+10x4-20x3-10x2+x,求和结果:f(x)+g(x)=8x6+12x5-20x3+22x2+10。顺序表的定义类型如下:#define MAXLEN 100typedef struct int dataMAXLEN;Int last;SeqList;(2)

2、链式存储结构的实现例如,已知:f(x)=100x100+5x50-30x10 +10,g(x)=150x90-5x50+40x20-20x10+3x,求和结果:f(x)+g(x)= 100x100+150x90+40x20-10x10+3x+10。3、 实验要求(1) 利用C(C+)语言完成程序设计。(2) 上机调试通过实验程序。(3) 输入数据,检验程序运行结果。(4) 给出具体的算法分析,包括时间复杂度和空间复杂度等。(5) 撰写实验报告(把输入实验数据及运行结果用抓图的形式粘贴到实验报告上)。4、 实验步骤与源程序 实验步骤我先从具体的问题中抽象出适当的数学模型,然后设计出相应的算法,对

3、于用顺序存储结构实现多项式求和而言,需要设计3个main函数调用的子函数,分别实现创建多项式,多项式相加和显示多项式;对于用链式存储结构实现多项式求和,也同样需要3个这样的子函数,最后,编写程序,并调试程序,得出实验结果。 源代码顺序存储结构:#include<stdio.h>#define MAXLEN 100typedef struct int dataMAXLEN; int last; SeqList;void add_List(SeqList A, SeqList B, SeqList *C) int i;C->last=A.last>B.last? A.las

4、t:B.last;for(i=0;i<=C->last;i+) C->datai=A.datai+B.datai;void show_list(SeqList C) int i; for(i=C.last;i>=1;i-) if(C.datai) printf("(%dx%d)+",C.datai,i); printf("(%dx%d)n",C.data0,0); void create_list(SeqList *D) int n,i; printf("tt请输入多项式X的最高次数:");scanf(&quo

5、t;%d",&n);for(int k=99;k>=0;k-) D->datak=0;printf("tt请输入多项式X的次数由大到小输入系数,缺少项用0补齐n"); for(i=n;i>=0;i-)printf("tt输入X%d项的系数: ",i); scanf("%d",&D->datai); D->last=n;void main() SeqList A,B,C; printf("tt创建多项式f(x):n"); create_list(&A);

6、 printf("ttf(x)="); show_list(A); printf("tt创建多项式g(x):n"); create_list(&B); printf("ttg(x)="); show_list(B); printf("tt多项式f(x)和g(x)的和: "); add_List (A,B,&C); printf("nttf(x)+g(x)="); show_list(C);链式存储结构:#include<stdio.h>#include<mall

7、oc.h>#include<math.h>typedef struct linknode float coef; int expn; struct linknode *next; Node;void create_link_list(Node *L) Node *p,*q; int n=1; float x=1; q=L; printf("n请按多项式指数由大到小输入系数和指数:n"); printf("提示: 系数和指数间用空格间隔,每组数据之间用回车间隔(系数和指数为0时结束输入)n"); while(fabs(x)>0.00

8、0001 ) scanf("%f %d",&x,&n); if(fabs(x)>0.00001) p=(Node *) malloc(sizeof(Node); p->coef=x; p->expn=n; p->next=NULL; q->next=p ; q=p; void show_link_list(Node *L) Node *p; p=L->next;while(p&&p->next ) printf("(%.1fx%d) + ",p->coef,p->exp

9、n); p=p->next; printf("(%.1fx%d) ",p->coef,p->expn);printf("n");void mergelist(Node *La,Node *Lb,Node *Lc) / 多项式合并 Node *pa,*pb,*pc; Node *q1,*q2; Lc=La;pc=Lc; pa=La->next;pb=Lb->next; while(pa && pb) if(pa->expn > pb->expn) pc->next=pa;pc=pa;pa

10、=pa->next; else if(pa->expn < pb->expn) pc->next=pb;pc=pb;pb=pb->next; else if(fabs(pa->coef+pb->coef)<0.000001) q1=pa; q2=pb; pa=pa->next; pb=pb->next; free(q1); free(q2); else q1=pb;pa->coef=pa->coef+pb->coef; pc->next=pa; pc=pa; pa=pa->next; pb=pb-&

11、gt;next; free(q1); if(pa) pc->next=pa; else pc->next=pb;void main() Node *LA,*LB,*LC;LA=(Node *)malloc(sizeof(Node); LA->next=NULL;LB=(Node *)malloc(sizeof(Node); LB->next=NULL; LC=LA; create_link_list( LA); printf("f(x) = ");show_link_list(LA);create_link_list( LB);printf(&quo

12、t;g(x) = ");show_link_list(LB);mergelist(LA,LB,LC);printf("nf(x)+g(x)= ");show_link_list(LC);5、 测试数据与实验结果(可以抓图粘贴)顺序存储结构的实现调试结果如图所示:链式存储结构的实现调试结果如图所示:6、 结果分析与实验体会本次实验是参考了范例程序,经过自己的改写,从而实现要求。先做简单的输出,一步步的再做其它格式的设置。而且,在具体操作中我对顺序存储结构和链式存储结构的优点和缺点有了更深刻的体会,顺序存储结构的算法较为简单,但是在输入的过程中有很大的局限性,必须从大到小依次且连续的输入多项式次数,所以,它只

温馨提示

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

评论

0/150

提交评论