一元多项式的相加(数据结构)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

课程名称:数据结构实验名称:一元多项式的相加

班级: 1333 学生姓名:蔡景旺学号: 37

一、需求分析

1.用户可以根据自己的需求分别输入两个一元多项式(输入必须按指数递增顺序),并且

能够实现输入的一元多项式的显示。

2.能够完成两个一元多项式的相加功能并显示结果。

3.程序执行的命令包括:

(1)构造链表A (2)构造链表B (3)两个链表的相加(4)求链表的长度(5)打印(显示)已有的链表

二、概要设计

⒈为实现上述算法,需要线性表的抽象数据类型:

ADT Polynomial {

数据对象:D={a i:|a i∈TermSet,i=1…n,n≥0

TermSet 中的每个元素包含一个表示系数的实数和表示指数的整数} 数据关系:R1={|a i-1,a i∈D,且a i-1中的指数值< a i中的指数值

i=2,…n≥0}

基本操作:

CreatPolyn(&p,m)

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

DestroyPolyn(&p)

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

操作结果:销毁一元多项式P。

PrintPolyn(P)

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

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

PolynLength(P)

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

操作结果:返回一元多项式中P的项数。

AddPolyn(&Pa,&Pb)

初始条件:一元多项式Pa和Pb已存在。

操作结果:完成一元多项式相加运算,即:Pa=Pa+Pb,销毁一元多项式Pb.

}ADT Polynomail

typedef struct{ // 项的表示,多项式为linklist的数据元素

float coef; //系数

int evpn; //指数

}term,ElemType; //两个类型名:term用于本ADT,ElemType为Linklist的数据对象名Typedef Linklist polynomial; //用带表头结点的有序链表表示多项式;

Int cmp(term a,term b);

void CreatPolyn (polynomial &P,int m){

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

InitList (P); h = GetHead (P);

e.coef = 0.0;e.expn = -1;SetCurElem (h,e); //设置头结点的数据元素

for (i = 1;i<=m;++i){//依次输入m项非零项

scanf(e.coef,e.expn);

if (! LocateElem(P,e,q,(*cmp)){ //当链表不存在指数项

if(MakeNode (s,e)) InsFirst(q,s);//生成结点并插入链表

}

}

}//CreatPolyn

void AddPolyn(polynomial &Pa, polynomial &Pb){

//多项式加法:Pa=Pa+Pb,利用两个多项式的结点构成“和多项式”

ha=Gethead(Pa); hb=Gethead(Pb);//ha和hb分别指向Pa和Pb的头结点

qa=NextPos(Pa,ha); qb=NextPos(Pb,hb);// /ha和hb分别指向Pa和Pb的当前结点

while(qa&&qb){//qa和qb均非空

a=GetCurElem(qa); b=GetCurElem(qb);

switch(*cmp(a,b)){

case -1: //多项式PA中当前结点的指数值小

ha=qa;qa= NextPos(Pa,ha);break;

case 0://l两者的指数相等

sum=a.cofe+b.cofe;

if(sum!=0.0){//修改多项式PA中当前结点的系数值

SetCurELem(qa,sum);ha=qa;}

else {//删除当前结点

Delfirst(ha,qa);FreeNode(qa);}

Delfirst(ha,qa);FreeNode(qa); qb=NextPos(Pb,hb); qa=NextPos(Pa,ha);break;

Case1://多项式PB中当前结点的指数值小

DelFirst(hb,qb); InsFirst(ha,qb);

qb=NextPos(Pb,hb); qa=NextPos(Pa,ha);break;

}//swtich

}//while

If(!ListEmpty(Pb)) Append(Pa,qb);

FreeNode(hb)://释放Pb头结点

}//AddPolyn

2. 数据结构分析:

逻辑结构为线性表,采用链式存储结构。因为我们要让一元多项式相加,需要使得数据变更,采用顺序存储结构的话,工作量就运用起来不便捷。因此链式存储结构显得更加简单方便。

3.本程序有三个模块:

⑴主程序模块

main(){

初始化;

{

构造线性表1;

构造线性表2;

相加;

显示结果;

⑵函数调用关系

Main

------------------------------------------------

↓↓↓

CreatPolyn(&p,m) AddPolyn(&Pa,&Pb) PrintPolyn(P) 4.Addpolyn流程

CreatPolyn(&p,m) AddPolyn(&Pa,&Pb)

PrintPolyn(P) PrintPolyn(P)

开始

相关文档
最新文档