数据结构一元稀疏多项式

  • 格式:doc
  • 大小:108.50 KB
  • 文档页数:24

下载文档原格式

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

要求完成如下功能:

(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");