当前位置:文档之家› 数据结构-实验2-多项式求和

数据结构-实验2-多项式求和

{ 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 )
D->last=n;
}
void main()
{ SeqList A,B,C;
printf("\t\t创建多项式f(x):\n");
create_list(&A);
printf("\t\tf(x)=");
show_list(A);
printf("\t\t创建多项式g(x):\n");
create_list(&B);
{ pc->next=pb;pc=pb;pb=pb->next;}
else if(fabs(pa->coef+pb->coef)<0.000001)
1、实验目的
(1)掌握线性表的顺序存储结构和链式存储结构;
(2)掌握线性表插入、删除等基本运算;
(3)掌握线性表的典型运用——多项式求和。
2、实验内容
编程实现多项式的求和运算:
(1)顺序存储结构的实现
例如,已知:f(x)=8x^6+5x^5-10x^4+32x^2-x+10,g(x)=7x^5+10x^4-20x^3-10x^2+x,
q=L;
printf("\n请按多项式指数由大到小输入系数和指数:\n");
printf("提示: 系数和指数间用空格间隔,每组数据之间用回车间隔(系数和指数为0时结束输入)\n");
while(fabs(x)>0.000001 )
{ scanf("%f %d",&x,&n);
if(fabs(x)>0.00001)
{ printf("\(%.1fx^%d\) + ",p->coef,p->expn);
p=p->next;
}
printf("\(%.1fx^%d\) ",p->coef,p->expn);
printf("\n");
}
void mergelist(Node *La,Node *Lb,Node *Lc) // 多项式合并
for(int k=99;k>=0;k--)
D->data[k]=0;
printf("\t\t请输入多项式X的次数由大到小输入系数,缺少项用0补齐\n");
for(i=n;i>=0;i--)
{printf("\t\t输入X^%d项的系数: ",i);
scanf("%d",&D->data[i]);
}
求和结果:f(x)+g(x)=8x^6+12x^5-20x^3+22x^2+10。
顺序表的定义类型如下:
#define MAXLEN 100
typedef struct
{ int data[MAXLEN];
Int last;
}SeqList;
(2)链式存储结构的实现
例如,已知:f(x)=100x^100+5x^50-30x^10 +10,g(x)=150x^90-5x^50+40x^20-20x^10+3x,
printf("\(%dx^%d\)+",C.data[i],i);
printf("\(%dx^%d\)\n",C.data[0],0);
}
void create_list(SeqList *D)
{ int n,i;
printf("\t\t请输入多项式X的最高次数:");
scanf("%d",&n);
C->last=st>st? st:st;
for(i=0;i<=C->last;i++)
C->data[i]=A.data[i]+B.data[i];
}
void show_list(SeqList C)
{ int i;
for(i=st;i>=1;i--)
if(C.data[i])
源代码
顺序存储结构:
#include<stdio.h>
#define MAXLEN 100
typedef struct
{ int data[MAXLEN];
int last;
} SeqList;
void add_List(SeqList A, SeqList B, SeqList *C)
{ int i;
4、实验步骤与源程序
实验步骤
我先从具体的问题中抽象出适当的数学模型,然后设计出相应的算法,对于用顺序存储结构实现多项式求和而言,需要设计3个main函数调用的子函数,分别实现创建多项式,多项式相加和显示多项式;对于用链式存储结构实现多项式求和,也同样需要3个这样的子函数,最后,编写程序,并调试程序,得出实验结果。
{ 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=pa->next;}
else if(pa->expn < pb->expn)
printf("\t\tg(x)=");
show_list(B);
printf("\t\t多项式f(x)和g(x)的和: ");
add_List (A,B,&C);
printf("\n\t\tf(x)+g(x)=");
show_list(C);
}
链式存储结构:
#include<stdio.h>
#include<malloc.h>
求和结果:f(x)+g(x)=100x^100+150x^90+40x^20-10x^10+3x+10。
3、实验要求
(1)利用C(C++)语言完成程序设计。
(2)上机调试通过实验程序。
(3)输入数据,检验程序运行结果。
(4)给出具体的算法分析,包括时间复杂度和空间复杂度等。
(5)撰写实验报告(把输入实验数据及运行结果用抓图的形式粘贴到实验报告上)。
#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;
相关主题