一元多项式的相加(数据结构)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)
开始