数据结构一元稀疏多项式
- 格式:doc
- 大小:108.50 KB
- 文档页数:24
要求完成如下功能:
(1)输入并建立多项式——creatpolyn()
(2)输出多项式,输出形式为整数序列,序列按指数升序排列——printpolyn() (3)多项式a和b相加,建立多项式a+b,输出相加的多项式——addpolyn() (4)多项式a和b相减,建立多项式a-b,输出相减的多项式——subpolyn()
用带表头结点的单链表存储多项式。
课程设计
学生姓名:学号:
专业班级:
课程名称:数据结构
学年学期:
指导教师:
目录
1.需求分析说明 (1)
2.概要设计说明 (3)
3.详细设计说明 (5)
4.调试分析 (10)
5.用户使用说明 (11)
6.课程设计总结 (12)
7.测试结果 (13)
8.参考书目 (16)
9. 附录 (17)
1 需求分析说明
1.程序所能达到的功能是
(1)输入并建立多项式——creatpolyn()
(2)输出多项式,输出形式为整数序列,序列按指数升序排列——printpolyn() (3)多项式a和b相加,建立多项式a+b,输出相加的多项式——addpolyn()
(4)多项式a和b相减,建立多项式a-b,输出相减的多项式——subpolyn()
用带表头结点的单链表存储多项式。
2.输入的形式和输入值的范围:本系统要输入的数据主要是有多项式中每项的系数和指数,可以把它们定义为整形数据,既可以为整数也可以为非负整数,即有符号的整形数据,由于整形数据在内存里占用两个字节,所以它的取值范围为-32768—32767。其次还有就是选择功能时,要输入的功能号,它们是字符型数据,取值范围是ASS||表中的字符。例如输入的格式如下:
请输入a的项数:3
请输入第一项的系数与指数:2,1
请输入第二项的系数和指数:5,8
请输入第三项的系数和指数:-3.1,11
请输入b的项数:3
请输入第一项的系数和指数:7,0
请输入第一项的系数和指数:5,8
请输入第三项的系数和指数:11,9
******************************************************************
多项式操作程序
* A:输出多项式a B:输出多项式b *
* C:输出a+b D:输出a-b *
* F:退出程序 *
********************************************************************
请选择操作:C
a+b=2x+5x8-3.1x11+7-5x8+11x9
请选择操作:D
a-b=2x+5x8-3.1x11-7+5x8-11x9
3.输出的形式:本系统要输出的是把创建好的第一个多项式和第二个多项式按指数
升序排
列,并把进行运算后的结果也按指数升序排列输出,输出形式如上面所示。
4.测试数据
正确的输入及输出结果:
(1)(2x+5x8-3.1x11)+(7-5x8+11x9)
(2) (6-3x+4.4x2-1.2x9)-(-6-3x+5.4x2+7.8x15)
(3)(x+x2+x3)+0
(4)(x+x3)-(-x-x-3)
2 概要设计说明模块调用图:
1.抽象数据类型的定义
多项式的结点类型定义
typedef struct Polynomial
{//多项式结点类型
float coef; //多项式的系数
int expn; //多项式的指数
struct Polynomial *next;//指向下一个结点}*Polyn,Polynomial;
建立表示一元多项式的有序表
Polyn CreatePolyn(Polyn head,int m);
销毁一元多项式
void DestroyPolyn(Polyn p);
返回一元多项式的项数
void PrintPolyn(Polyn P);
完成多项式加法运算
Polyn AddPolyn(Polyn pa,Polyn pb);
完成多项式相减运算
Polyn SubtractPolyn(Polyn pa,Polyn pb);
2.主程序的流程
(1)输出提示信息
(2)输入多项式项数
(3)输入每项的系数和指数
(4)输出选择操作的菜单
(5)根据选择输出多项式
(6)释放链表占用的内存空间
(7)完成退出程序
3.各程序模块之间的层次(调用)关系
本系统首先是创建多项式,在进行排序显示,然后按提示输入要实现的功能。此系统有五个模块,它们的调用关系如下:
在CreatePolyn函数中调用Insert;
在main函数中调用CreatePolyn(pa,m). CreatePolyn(pb,n). PrintPolyn(pa).
PrintPolyn(pb). AddPolyn(pa,pb). SubtractPolyn(pa,pb). DestroyPolyn(pa). DestroyPolyn(pb)
3 详细设计说明
1.设计中定义的所有数据类型伪码算法
(1)多项式建立的算法
该算法是用来创建多项式链表。首先要创建一个结点,并用一个指针指向它,并给它进行初始化
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);//生成结点并插入链表
}
}
}
(2)显示多项式的算法
该算法用来显示多项式。访问第一个结点,并判断是否为空表,如果是空表就不进行任何操作,否则就输出该结点的系数。
void PrintPolyn(Polyn P)
{
Polyn q=P->next;
int flag=1;//项数计数器
if(!q)
{
putchar('0'); //若多项式为空,输出0
printf("\n");