文档详情

两个一元多项式的表示及相加-数据结构实验报告.doc

发布:2025-05-05约3.53千字共13页下载文档
文本预览下载声明

实验报告

1、需求分析:

两个一元多项式的表示及相加

2、总体设计:

(1)抽象数据类型

1,(ADT)polynomial的定义

ADTpolynomial{

数据对象:D={ai|ai∈termset,i=1,2,3,···,m,m=0termset中的每一个元素包含一个表示系数和表示指数的整数}

数据关系:R1={ai-1,ai|ai-1,ai∈D,且ai-1中的指数ai中的指数,i=2,···,n}

基本操作:

createpolyn(intm)

操作结果:输入m项的系数和指数,建立一元多项式。

print(p)

初始条件:一元多项式p已存在。

操作结果:打印输出一元多项式p。

addpolyn(ha,hb);

初始条件:一元多项式ha和hb已存在

操作结果:完成一元多项式的相加,即ha=ha+hb,并销毁一元多项式hb。

}ADTpolynomial

2,(ADT)polynomial的实现

Typedefstruct{//项的表示,多项式的项作为linklist的数据元素

Floatcoef;//系数

Intexpn;//指数

}term,elemtype;//term作为本ADT,elemtype为linklist的数据对象名

typedefstructnode

{ElemTypedata;

??structnode*next;}

polynode,*LinkList;

Typedeflinklistpolynomial;//用带头结点的有序链表表示多项式

//-----基本操作的函数原型说明-----

polynomialcreatepolyn(intm)

//输入m项的系数和指数,建立表示一元多项式的有序链表p

Voidaddpolyn(polynmailpa,polynmailpb);

//完成多项式的相加,即pa=pa+pb,并销毁pb

voidprint(polynomialp)

//输出函数,打印出多项式相加结果

(2)数据存储结构分析

一元多项式在计算机内用链表来表示,为了节省存储空间,只存储其中的非0数据项。它包含含三个域,分别存放多项式的系数,指数,以及指向下一个元素上的指针。

(3)主程序流程

开始

开始

将pa和pb相加

建立一元多项式pb

建立一元多项式pa

结束

(4)重要算法流程图:将pa和pb相加

3、详细代码

#includestdio.h

#includemalloc.h

#includestdlib.h

#defineLENsizeof(polynode)

typedefstruct

{

floatcoef;

intexpn;

}ElemType;

typedefstructnode

{

ElemTypedata;

structnode*next;

}polynode,*Linklist;

typedefLinklistpolynomial;

polynomialhead;

polynomialcreatepolyn(intm)

{inti,e;

floatc;

polynomialp,s;

head=(polynomial)malloc(LEN);

p=(polynomial)malloc(LEN);

head-data.coef=0.0;

head-data.expn=0;

p=head;

for(i=1;i=m;i++)

{

s=(polynomial)malloc(LEN);

scanf(%f,%d,c,e);

s-data.coef=c;

s-data.expn=e;

p-next=s;

p=s;

}

p-next=NULL;

return(head);

}

voidpolyadd(polynomialha,polynomialhb)//一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式ha中,并将多项式hb删除

{

polynomialp,q,pre,temp;

floatsum;

p=ha-next;

q=hb-next;

pre=ha;

while(p!=NULLq!=NULL)

{

if(p-data.expnq-data.expn)

{

pre-next=p;

pre=pre-next;

p=p-next;

}

elseif(p-data.expn==q-data.expn)

{sum=p

显示全部
相似文档