数据结构实验报告Word文档下载推荐.docx
《数据结构实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
-10121012
(4)除法:
21多项式:
121011
(5)求导:
4多项式:
101111213
(6)求定积分:
2多项式:
1021上线和下限:
21
(7)求不定积分:
3多项式:
102132
二、概要设计
为实现上述功能,以改进的单链表来存多项式,每一个结点存储多项式的一项,为此有以下的抽象数据类型——线性表和一元多项式。
1.线性表的抽象数据类型定义为:
ADTLinkList{
数据对象:
ai|ai∈ElemSet,i=1,2,…,n,n>
=0)
数据关系:
R={<
ai-1,ai>
|ai-1,ai∈D,i=1,2,,n-1}。
线性表也可表示作(a1,a2,…,an),n为表长,n=0时线性表称为空表
基本操作:
StatusMakeNode(Link&
p,ElemTypee);
操作结果:
分配由p指向的值为e的结点
voidfreeNode(Link&
p);
操作结果:
释放p所指结点
StatusInitList_L(LinkList&
L);
构造一个空链表L
StatusDestroyList_L(LinkList&
初始条件:
L已存在
操作结果:
释放头结点与元素节点
StatusClearList_L(LinkList&
将链表置空
StatusInsFirst_L(LinkList&
L,Links)
L已经存在
将s所指结点插入到L的第一个元素结点前,头结点后
StatusAppend(LinkList&
L已经初始化
StatusInsAfter_L(LinkList&
L,Link&
p,Links)
将s所指的结点插入到p所指的结点后,并修改p,使之指向新的结点
StatusDeleteFirst_L(LinkList&
L,Linkp,Link&
q)
将Pa中p指向的第一个元素结点删除并以q返回
StatusDeleteAfter_L(LinkList&
L,Linkp,Linkq)
已知p指向L中的某个结点,删除p指向结点的后结点,并以q返回
StatusSetCurElem_L(Link&
p,ElemTypee)
用e更新p所指向的数据域
StatusListEmpty(LinkListL)
判断表是否为空
intListLength_L(LinkListL)
求表长
ElemTypeGetCurElem_L(Linkp);
p指向的结点存在
返回p所指的数据
StatusLocatePos_L(LinkListL,inti,Link&
p)
用p返回L中第i个元素结点的位置,
StatusLocateElem_L(LinkListL,ElemTypee,Link&
p,Status(*cmp)(ElemType,ElemType))
返回L中第一个与元素e满足关系cmp()的元素的位置
PositionLocateElemprior_L(LinkListL,ElemTypee,Status(*cmp)(ElemType,ElemType))
返回L中第一个与元素e满足关系cmp()的元素的位置的前驱
PositionGetHead(LinkListL);
返回链表的头指针
PositionPriorPos(LinkListL,Linkp);
返回p的前驱
PositionNextPos_L(LinkListL,Linkp);
返回p的后继
}ADTLinkList
2.多项式的抽象数据类型定义为:
ADTPolynomial{
D={ai|ai∈TermSet,i=1,2,…,m,m>
=0,TermSet中的元素包含一个表示系数的实数和一个表示指数的整数}
|ai-1,ai∈D,且ai-1中的指数值小于ai中的指数值,i=2..n}
基本操作:
CreatePolyn(&
p,m)
输入m项的系数和指数,创建一元多项式P
DestroyPolyn(&
一元多项式P已经存在
销毁一元多项式P
PrintPolyn(P)
初始条件:
打印输出一元多项式P
PolynLength(P);
一元多项式已经存在
返回一元多项式的项数
StatusIntegrate(LinkList&
L);
将单链表中指数相同的项进行整理合并
intCreatPolyn(LinkList&
P,intm);
创建多项式
intPrintPolyn(PolynomialPa);
输出多项式
StatusSortList_L(LinkList&
L);
将多项式排序
StatusCopyPolyn(Polynomial&
Pc,PolynomialPa);
多项式Pc,Pa已经存在
将Pa复制给Pc
AddPolyn(&
pa,&
pb)
一元多项式Pa与Pb已经存在
计算Pa=Pa+Pb,并销毁Pb
intSubtractPolyn(LinkList&
Pa,LinkList&
Pb)
计算Pa=Pa-Pb,并销毁Pb
StatusPolyDerivative(Polynomial&
Pa);
一元多项式Pa已经存在
计算Pa的导数
StatusMultiOneIterm(PolynomialPc,Polynomial&
Paa,Linkqb)
一元多项式Pc,Paa已经存在,
计算Pc=Paa*qb
StatusMultiplyPolyn(Polynomial&
Pa,PolynomialPb)
计算Pa=Pa*Pb,并销毁Pb
StatusDividePolyn(Polynomial&
Pa,PolynomialPb,Polynomial&
Pc)
一元多项式Pa、Pc与Pb已经存在
计算Pa=Pa/Pb,并销毁Pb,余数等于Pc
StatusIndefiIntePolyn(Polynomial&
Pa)
计算Pa的不定积分
floatValueofPolyn(PolynomialPa,floata)
已知x的值,求多项式的值
floatDefiIntePolyn(Polynomial&
Pa,floata,floatb)
求多项式的定积分,并根据积分上下限的值a,b求出定积分的值作为函数的返回值
3.本程序包括四个模块:
(1)主程序模块:
Intmain(){
初始化;
While
{
接受命令;
处理命令;
}(“命令”=“退出”);
return0;
}
(2)多项式单元模块——实现多项式抽象数据类型
(3)有序表单元模块——实现有序表抽象数据类型
(4)节点结构单元模块——实现单链表的结点结构
各模块之间的调用关系:
主程序模块
多项式模块
有序表单元模块
节点结构单元模块
三、详细概要设计
1.元素类型、节点类型、指针类型
typedefstruct
floatcoef;
intexpn;
}Term;
//多项式就是一个元素类型为Term的单链表
typedefTermElemType;
typedefstructLNode{
ElemTypedata;
structLNode*next;
}*Link,*Position;
2.根据有序单链表的特点,并且为了方便多项式的调用和操作。
单链表采用改进的单链表,链表设头尾两个指针,和表现行数据域。
头结点的数据域没有实在意义。
typedefstructLinkList
Linkhead,tail;
intlen;
}LinkList;
typedefLinkListPolynomial;
改进的单链表基本操作如下:
//构造一个空链表L
//释放头结点与元素节点
//将链表置空
//将s所指结点插入到L的第一个元素结点前,头结点后
//将s所指的结点插入到p所指的结点后,并修改p,使之指向新的结点
//将Pa中p指向的第一个元素结点删除并以q返回
//已知p指向L中的某个结点,删除p指向结点的后结点,并以q返回
//用e更新p所指向的数据域
Statu