数据结构课程设计 - 一元多项式加法器

数据结构课程设计 - 一元多项式加法器
数据结构课程设计 - 一元多项式加法器

数据结构课程设计报告一元多项式加法器

专业:

班级:

学号:

姓名:

指导老师:

目录

1.序言 (3)

1.1关于数据结构 (3)

1.2数据结构课程设计的目的 (3)

2 需求分析 (4)

2.1题目要求 (4)

2.2题目分析 (4)

3 概要设计 (5)

3.1总体解决方案 (5)

3.2总体功能流程图 (6)

4 详细设计与实现 (6)

4.1系统主要函数组成 (6)

4.2基本函数实现流程 (7)

5 代码与解析 (12)

6 调试与操作说明 (18)

6.1操作说明 (18)

6.2调试结果 (19)

总结 (20)

参考文献 (20)

1.序言

1.1关于数据结构

数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁。该课程的先行课程是计算机基础、程序设计语言、离散数学等,后续课程有操作系统、编译原理、数据库原理、软件工程等。通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力,而且该课程的研究方法对我们学生在校和离校后的学习和工作,也有着重要的意义。

数据结构是计算机科学与技术专业的一门核心专业基础课程,在该专业的课程体系中起着承上启下的作用,学好数据结构对于提高理论认知水平和实践能力有着极为重要的作用。学习数据结构的最终目的是为了获得求解问题的能力。对于现实世界中的问题,应该能从中抽象出一个适当的数学模型,该数学模型在计算机内部用相应的数据结构来表示,然后设计一个解此数学模型的算法,再进行编程调试,最后获得问题的解答。

基于此原因,我们开设了数据结构课程设计。针对数据结构课程的特点,着眼于培养我们的实践能力。实习课程是为了加强编程能力的培养,鼓励学生使用新兴的编程语言。相信通过数据结构课程实践,无论是理论知识,还是实践动手能力,同学们都会有不同程度上的提高。

1.2数据结构课程设计的目的

通过课程设计题目的练习,强化学生对所学知识的掌握及对问题分析和任务定义的理解,对每到题目作出了相应的逻辑分析和数据结构的选择,通过对任务的分析,为操作对象定义相应的数据结构,以过程化程序设计的思想方法为原则划分各个模块,定义数据的抽象数据类型。分模块对题目进行设计,强化学生对C语言的掌握和对数据结构的选择及掌握。通过程序的编译掌握对程序的调试方法及思想,并且让学生学会使用一些编程技巧。促使学生养成良好的编程习惯,以及让学生对书本上的知识进行了实践。算法与数据结构这门课是计算机科学中一门综合性的专业基础课。它不仅是计算机学科的核心课程,而且已成为其它理工专业的热门选修课。它又是操作系统、编译原理、数据库原理、算法分析、人工智能、图象处理等专业课程的前导课。具有承上启下的作用。数据结构的研究不仅涉及到计算机硬

件的研究范围,而且和计算机软件的研究有着密切的关系。计算机科学各领域及有关的应用软件都要用到数据结构。该课程的目的就是介绍一些最常用的数据结构,阐明数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种典型应用说明它们在进行各种运算时的动态性质及实际的执行算法。

2.需求分析

2.1题目要求

一元多项式加法器

【问题描述】

设计一个一元多项式加法器。

【基本要求】

(1)输入并建立多项式;

(2)两个多项式相加;

(3)输出多项式:n, c1, e1, c2, e2, …cn , en, 其中,n是多项式项数,ci

和ei分别是第 i 项的系数和指数,序列按指数降序排列。

(4)计算多项式在x处的值;

(5)求多项式的导函数。

2.2题目分析

在数学上,一个一元多项式Pn(x)可按降幂写成:Pn(x)=a0+a1 x+a2x^2 +…+a n

x^n-1 .它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表P来

表示:Pn=(a0,a1,a2,…,a n)每一项的指数i隐含在其系数a i的序号里。题中只要求

我们求两个多项式的加法,求值,求导和输入输出功能,只要掌握其规律,运用

单链表的基本操作就能有效解决。

3.概要设计

3.1总体解决方案

1、任务思路与方法

1)定义线性表的动态分配顺序存储结构;

2)建立多项式存储结构,定义指针*next利用链表实现队列的构造;

3)每次输入一项的系数和指数,可以输出构造的一元多项式;

4)要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这

里采用链表的方式存储链表,所以我将结点结构体定义为

系数coef指数expn指针域next

运用尾插法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyn p中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。2.相关算法:

1)元素类型、结点类型和指针类型:

typedef struct Polynomial{

float coef; //系数

int expn; //指数

struct Polynomial *next;

}*Polyn,Polynomial;

2)建立一个头指针为head、项数为m的一元多项式, 建立新结点以接收数据, 调用Insert函数插入结点:

Polyn CreatePolyn(Polyn head,int m){

int i;

Polyn p;

p=head=(Polyn)malloc(sizeof(struct Polynomial));

head->next=NULL;

for(i=0;i

{

p=(Polyn)malloc(sizeof(struct Polynomial));

printf("请输入第%d项的系数与指数:",i+1);

scanf("%f %d",&p->coef,&p->expn);

Insert(p,head);

}

return head;

}

3.2总体功能流程图

4.详细设计与实现

4.1系统的主要函数组成

1. main()函数

main 函数用来实现提示使用者输入、显示功能列表、调用其他运算函数实现运算功能。

在main()函数中,定义m 、n 用来保存两个多项式的项数,pa 、pb 、pc 、pd 、pf 定义程序所需链表的头指针。在程序开始要求输入两个多项式的项数,随后根据项数创建两个链表以保存多项式,再显示出功能列表后通过if 语句来实现功能的选择,从而对整个程序流程进行控制。 2. Polyn CreatePolyn(Polyn head,int m)

该函数功能是创建新的多项式链表。int m 保存的多项式的项数,使用for 语句,控制输入多项式的每一项。当创建的链表长度为m 时,将不再提示用户继

结 束

求一元多项式的加法(a+b )

求一元多项式的导函数

开 始

输入多项式

根据输入创建一元多项式并开始存

输出一元多项式并输入X 的值,求一元多项式的值

续输入多项式的系数和指数。

在该函数中要用到分配空间的函数malloc()为新建链表分配空间。

3. void DestroyPolyn(Polyn p)

该函数的功能是销毁掉创建的两个链表,释放内存。以辅助退出程序。

4. void Insert(Polyn p,Polyn h)

该函数功能:将新的节点p插入到现有链表的后面,并确保多项式的指数exp是升序。将s节点插入到head所指向的链表。在该函数的操作中,要注意指针是如何移动的。

5. Polyn AddPolyn(Polyn pa,Polyn pb)

该函数功能:实现两个多项式pa、pb相加,并将计算结果存储于新建立的pc中,它的原理是将指数相同的单项式相加,系数相加后为0,则pa、pb的指针都后移。在加法计算中要求pa,与pb的幂次序都是升序,否则可能得到错误的结果。

该函数调用了int compare(Polyn a,Polyn b)的结果,用来判断多项式在同一指数下a、b是否有为系数为0。同样也使用了malloc()关键字,为新链表创建空间。

6. int compare(Polyn a,Polyn b)

该函数功能:判断两个多项式在同一指数下是否有其中一个为系数为0。用来辅助加法和乘法运算。

7. void PrintPolyn(Polyn P)

该函数功能:显示多项式链表。在该函数中较复杂的是如何控制链表的输出,尤其是第一项的输出,同时还有符号的控制。在输出第一项时要判断是不是常数项,若是,则不要输出字符x。

8. float ValuePolyn(Polyn pa,float x)

该函数功能:求多项式在x处的值,对于指数小于0和大于0的多项式采用不同的算法,最后再把多项式的和输出。

9. Polyn Derivation(Polyn head)

该函数功能:对多项式求导,对指数和系数分别采用不同的算法,再把结点重新插入一个新的链表。

4.2基本函数实现流程

1.输出多项式

假设指针p指向多项式的第一项

①P所指指数为0,则直接输出系数

②p所指指数为1,如果系数即不为1,也不为0,则直接输出系数;如果系数为-1,则输出系数“-”,最后输出“x”

③p所指指数即不为0,也不为1,如果系数为-1,则输出“-x^”和指数,如果系数为1,则输出“x^”和指数,否则输出系数、“x^”及指数

流程图如下图:

开始

! NULL p->expn

若系数即不为1,也不为0,则直接输出系数;若系数为-1,则输出系数“-”,最后输出“x” 0 1

default

直接输出系数

若系数为-1,则输出“-x^”和指数,若系数为1则输出“x^”和指数,否则输出系数、“x^”及指数

输出“+”

1

P 系数>0?

p->expn

0 1

default

直接输出系数

若系数为-1,则输出“-x^”和指数,若系数为1则输出“x^”和指数,否则输出系数、“x^”及指数

若系数即不为1,也不为0,则

直接输出系数;若系数为-1,则输出系数“-”,最后输出“x” ! NULL 0

NULL

返回out

结束

p=p->next

根据一元多项式相加的运算规则:对于两个一元多项式中指数相同的项,对应的系数相加,若之和不为零,则构成“和多项式”中的一项;对于两个一元多项式中指数不相同的项,则将指数小的添加到“和的多项式”中去,最后将还没结束的多项式插入到和的多项式中去。

流程图如下图:

开始

a=pa->next

b=pb->next

c=pc->next

a&&b

指数相同的项,对应的系数相加,若之和

不为零,则构成“和多项式”中的一项

指数不相同的项,则将指数小的添加到“和

的多项式”中

将还没结束的多项式插入到和的多项式中

结束

① 假设指针p 指向多项式的第一项,sum2代表整个多项式的值(开始赋值为0),sum1代表一项的值(开始赋值为1)

② 每一项求法:指数为n ,则x 连乘n 次,得到sum1,然后再用sum1乘系数 最后将每一项加到sum2中。 流程图如下图:

p=pa->next

开始

sum1= 每一项的值

sum2+=sum1

p=p->next

返回sum2

结束

NULL ! NULL

sum1=1

p

①假设p指向多项式A

②如果该多项式为常数,则p指向下一项

③否则系数=系数*指数,指数=指数-1

④将产生的新的项插入到新的多项式B中,p指向下一项流程图如下图:

开始

Term *p,*q,*x

p=head->next

p

p=p->next 结束NULL

! NULL

系数=系数*指数,指数=指数-1将产生的新的项插入到新的多项式B 中,p指向下一项1

p->expn==o

5.代码与解析

#include

#include

typedef struct Polynomial{

float coef;

int expn;

struct Polynomial *next;

}*Polyn,Polynomial; //Polyn为结点指针类型

//*****************插入多项式中的因子******************//

void Insert(Polyn p,Polyn h){

if(p->coef==0) free(p); //系数为0的话释放结点

else{

Polyn q1,q2;

q1=h;q2=h->next;

while(q2&&p->expnexpn){ //查找插入位置

q1=q2;

q2=q2->next;

}

if(q2&&p->expn==q2->expn){ //将指数相同相合并

q2->coef+=p->coef;

free(p);

if(!q2->coef){ //系数为0的话释放结点

q1->next=q2->next;

free(q2);

}

}

else{ //指数为新时将结点插入

p->next=q2;

q1->next=p;

}

}

}//Insert

//*************建立多项式****************//

Polyn CreatePolyn(Polyn head,int m){//建立一个头指针为head、项数为m的一元多项式

int i;

Polyn p;

p=head=(Polyn)malloc(sizeof(struct Polynomial));

head->next=NULL;

for(i=0;i

p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据printf("请输入第%d项的系数与指数:",i+1);

scanf("%f %d",&p->coef,&p->expn);

Insert(p,head); //调用Insert函数插入结点

}

return head;

}//CreatePolyn

//*************删除多项式****************//

void DestroyPolyn(Polyn p){

Polyn q1,q2;

q1=p->next;

q2=q1->next;

while(q1->next){

free(q1);

q1=q2;//指针后移

q2=q2->next;

}

}

//***************输出多项式******************//

void PrintPolyn(Polyn P){

Polyn q=P->next;

int flag=1;//项数计数器

if(!q) { //若多项式为空,输出0

putchar('0');

printf("\n");

return;

}

while (q){

if(q->coef>0&&flag!=1) putchar('+'); //系数大于0且不是第一项

if(q->coef!=1&&q->coef!=-1){//系数非1或-1的普通情况

printf("%g",q->coef);

if(q->expn==1) putchar('X');

else if(q->expn) printf("X^%d",q->expn);

}

else{

if(q->coef==1){

if(!q->expn) putchar('1');

else if(q->expn==1) putchar('X');

else printf("X^%d",q->expn);

}

if(q->coef==-1){

if(!q->expn) printf("-1");

else if(q->expn==1) printf("-X");

else printf("-X^%d",q->expn);

}

}

q=q->next;

flag++;

}//while

printf("\n");

}//PrintPolyn

int compare(Polyn a,Polyn b){

if(a&&b){

if(!b||a->expn>b->expn) return 1;

else if(!a||a->expnexpn) return -1;

else return 0;

}

else if(!a&&b) return -1;//a多项式已空,但b多项式非空

else return 1;//b多项式已空,但a多项式非空

}//compare

//**************多项式加法函数*****************//

Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针Polyn qa=pa->next;

Polyn qb=pb->next;

Polyn headc,hc,qc;

hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点

hc->next=NULL;

headc=hc;

while(qa||qb){

qc=(Polyn)malloc(sizeof(struct Polynomial));

switch(compare(qa,qb)){

case 1:

{

qc->coef=qa->coef;

qc->expn=qa->expn;

qa=qa->next;

break;

}

case 0:

{

qc->coef=qa->coef+qb->coef;

qc->expn=qa->expn;

qa=qa->next;

qb=qb->next;

break;

}

case -1:

{

qc->coef=qb->coef;

qc->expn=qb->expn;

qb=qb->next;

break;

}

}//switch

if(qc->coef!=0){

qc->next=hc->next;

hc->next=qc;

hc=qc;

}

else free(qc);//当相加系数为0时,释放该结点

}//while

return headc;

}//AddPolyn

//**************求多项式在X处的值*******************//

float ValuePolyn(Polyn pa,float x)//求多项式a在X处的值

{

Polyn p;

int i;

float t;

float sum=0;

for(p=pa->next;p;p=p->next)

{

t=1;

for(i=p->expn;i!=0;)

{

if(i<0){t/=x;i++;} //指数小于,进行除法

else{t*=x;i--;} //指数大于,进行乘法}

sum+=p->coef*t;

}

return sum;

}

//**************多项式求导函数******************//

Polyn Derivation(Polyn head){ //求解并建立导函数多项式,并返回其头指针

Polyn q=head->next,p1,p2,hd;

hd=p1=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点

hd->next=NULL;

while(q)

{

if(q->expn!=0)

{ //该项不是常数项时

p2=(Polyn)malloc(sizeof(struct Polynomial));

p2->coef=q->coef*q->expn;

p2->expn=q->expn-1;

p2->next=p1->next; //连接结点

p1->next=p2;

p1=p2;

}

q=q->next;

}

return hd;

}

//*******************主函数*********************//

int main(){

int m,n,flag=0;

float x,y;

Polyn pa=0,pb=0,pc,pd;//定义各式的头指针,pa与pb在使用前付初值NULL //输出菜单

printf("欢迎使用一元多项式加法器\n");

printf("**********************************************\n");

printf("操作提示:\n\t1.输入多项式a和b\n\t2.输出多项式a和b\n\t3.输出多项式a+b\n\t4.输出多项式a在x处的值\n\t5.输出多项式a的导函数\n");

printf("\t6.退出\n**********************************************\n");

for(;;flag=0){

printf("执行操作(输入1~6):");

scanf("%d",&flag);

if(flag==1){

printf("请输入a的项数:");

scanf("%d",&m);

pa=CreatePolyn(pa,m);//建立多项式a

printf("请输入b的项数:");

scanf("%d",&n);

pb=CreatePolyn(pb,n);//建立多项式b

}

if(flag==2){

printf("多项式a:");PrintPolyn(pa);

printf("多项式b:");PrintPolyn(pb);continue;

}

if(flag==3){

pc=AddPolyn(pa,pb);

printf("输出多项式a+b:");PrintPolyn(pc);

DestroyPolyn(pc);continue;

}

if(flag==4){

printf("请输入X的值:");

scanf("%f",&x);

printf("所求多项式值为:%.3f\n",ValuePolyn(pa,x));

continue;

}

if(flag==5){

pd=Derivation(pa);

printf("多项式a的导函数为:");

PrintPolyn(pd);

DestroyPolyn(pd);

continue;

}

if(flag==6) break;

if(flag<1||flag>6) printf("Error!!!\n");continue;

}//for

DestroyPolyn(pa);

DestroyPolyn(pb);

return 0;

}

6 调试与操作说明6.1操作说明

1.先选择功能,输入(1~6),

2.输入1,输出两个多项式a与b 。

3.输入2,输出两个多项式a与b 。

3.输入3,输出多项式a+b 。

4.输入4,输出多项式a在x处的值。

5.输入5,输出多项式a的导函数。

6.输入6,退出。

根据提示逐个输入即可。

6.2调试结果

由上述一系列操作之后得到的运行解过下图所示:

由上述一系列操作之后得到的结果的输出格式完全按照题目要求输出,结果也完全符合一元多项式的加法、求值、求导过程后的结果一致,可见整个系统的流程和算法是正确的,因此本系统有一定的可行性。

总结

通过这次课程设计练习,使我更深刻地理解了C语言的精髓-----指针的使用。完成整个程序设计后对指针掌握的更加熟练。

同时通过直接对链表的操作,加深了对数据结构的理解和认识。并在完成课程设计的过程作主动查阅了相关资料,学到了不少课本上没有的技术知识。

经过这次课程设计,我深刻认识到算法在程序设计中的重要性,一个完整的程序总是由若干个函数构成的,这些相应的函数体现了算法的基本思想。

编程是一件枯燥乏味工作,但是只要认真钻研,我们会从中学到很多在课本上学不到或者无法在课堂上掌握的知识,同时也能从中感受到编程的乐趣。兴趣是可以培养的,只要坚持下去,面对困难我们总能够找到解决问题的方法。

在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次实习可以提高我们分析设计能力和编程能力,为后续课程的学习及实践打下良好的基础。

另外也需要提出的是在这次程序设计的过程中,非常感谢老师对我们的耐心指导。老师在教学过程中表现出来的对学术专研一丝不苟的精神让我非常有收获。同样也是老师的严格要求才使得小组成员能够顺利的完成任务。

参考文献

1.朱若愚.数据结构[M].北京: 电子工业出版社, 2004.1:44-55

2.严蔚敏,吴伟民.数据结构(C语言版)[M]. 北京:清华大学出版社,

2007.4:39-43

3.赵文静. 数据结构与算法[M]. 北京:科学出版社,2005.8:41-65

4.刘大有.数据结构[M]. 北京:高等教育出版社, 2001.3:39-48

数据结构课程设计报告一元多项式的计算

数据结构课程设计报告题目:一元多项式计算 院(系):计算机与信息科学学院 专业:软件工程 班级:软件1202班 学号:02 05 40 姓名:陈潇潇刘敏易庆鹏 指导教师:彭代文 2013年12月

目录 一、课程设计介绍 ........................错误!未定义书签。 1.1课程设计目的 (3) 1.2课程设计内容 (3) 1.2课程设计要求 (3) 二、需求设计 ............................错误!未定义书签。 2.1课设题目粗略分析 (3) 2.2原理图介绍.......................... 错误!未定义书签。 2.2.1 功能模块图...................... 错误!未定义书签。 2.2.2 流程图分析 (4) 三、需求分析 .............................错误!未定义书签。 3.1存储结构 (5) 3.2算法描述 (6) 四、调试与分析 ...........................错误!未定义书签。(1)调试过程 .......................... 错误!未定义书签。(2)程序执行过程...................... 错误!未定义书签。参考文献.................................错误!未定义书签。总结.....................................错误!未定义书签。附录(关键部分程序清单)...............错误!未定义书签。

一、课程设计介绍 1.1课程设计目的 ⑴熟悉使用c语言编码程序,解决实际问题; ⑵了解数据结构与算法的设计方法,具备初步的独立分析和设计能力。 ⑶初步掌握软件开发过程的分析能力,系统设计,程序编码,测试等基本能力。 ⑷提高综合运用的能力,运用所学理论知识与独立分析能力。 1.2课程设计内容 一元多项式计算 任务:⑴能够按照指数降序排列建立并输出多项式 ⑵能够完成两个多项式的相加,并将结果输入 ⑶在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法 1.3课程设计要求 ⑴学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。 ⑵学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。 ⑶课程设计按照教学要求需要一周时间完成,一周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序30小时。 ⑷课程设计在期末考试之前交。最好一起上交。 ⑸同班同学之间最好不要相同。源代码可以打印,但是下面模块要求的内容必须手写。 二、需求设计 2.1 课设题目粗略分析 建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果

数据结构实验报告,一元多项式资料

数据结构课程设计报告

目录 一、任务目标,,,,,,,,,,,, 3 二、概要设计,,,,,,,,,,,, 4 三、详细设计,,,,,,,,,,,, 6 四、调试分析,,,,,,,,,,,, 8 五、源程序代码,,,,,,,,,, 8 六、程序运行效果图与说明,,,,, 15 七、本次实验小结,,,,,,,,, 16 八、参考文献,,,,,,,,,,, 16

任务目标 分析(1) a. 能够按照指数降序排列建立并输出多项式 b.能够完成两个多项式的相加,相减,并将结果输入要求:程序所能达到的功能: a.实现一元多项式的输入; b.实现一元多项式的输出; c.计算两个一元多项式的和并输出结果; d.计算两个一元多项式的差并输出结果;除任务要求外新增乘法: 计算两个一元多项式的乘积并输出结果 (2)输入的形式和输入值的范围:输入要求:分行输入,每行输入一项,先输入多项式的指数,再输入多项式的系数,以0 0 为结束标志,结束一个多项式的输入。 输入形式: 2 3 -1 2 3 0 1 2 0 0 输入值的范围:系数为int 型,指数为float 型 3)输出的形式: 第一行输出多项式1; 第二行输出多项式2; 第三行输出多项式 1 与多项式 2 相加的结果多项式; 第四行输出多项式 1 与多项式 2 相减的结果多项式;第五行输出多项式 1 与多项式 2 相乘的结果多项式 二、概要设计 程序实现 a. 功能:将要进行运算的二项式输入输出;

b. 数据流入:要输入的二项式的系数与指数; c.数据流出:合并同类项后的二项式; d.程序流程图:二项式输入流程图; e.测试要点:输入的二项式是否正确,若输入错误则重新输入

一元多项式加减乘除运算

中国计量学院实验报告 实验课程:算法与数据结构实验名称:一元二项式班级:学号: 姓名:实验日期: 2013-5-7 一.实验题目: ①创建2个一元多项式 ②实现2个多项式相加 ③实现2个多项式相减 ④实现2个多项式相乘 ⑤实现2个多项式相除 ⑥销毁一元多项式 实验成绩:指导教师:

二.算法说明 ①存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储 空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。 ②加法算法

三.测试结果 四.分析与探讨 实验数据正确,部分代码过于赘余,可以精简。 五.附录:源代码#include<> #include<> #include<> typedef struct Polynomial { float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial; 出多项式a和b\n\t2.多项式相加a+b\n\t3.多项式相减a-b\n"); printf("\t4.多项式相除a*b\n\t5.多项式相除a/b\n\t6.销毁多项式\n"); printf("\t7.退出

\n*********************************** ***********\n"); printf("执行:"); scanf("%d",&flag); switch(flag) { case(1): printf("多项式a:");PrintPolyn(pa); printf("多项式b:");PrintPolyn(pb);break; case(2): pc=AddPolyn(pa,pb); printf("多项式a+b:");PrintPolyn(pc); DestroyPolyn(pc);break; case(3): pd=SubtractPolyn(pa,pb); printf("多项式a-b:");PrintPolyn(pd); DestroyPolyn(pd);break; case(4): pf=MultiplyPolyn(pa,pb); printf("多项式a*b:");PrintPolyn(pf); DestroyPolyn(pf);break; case(5): DevicePolyn(pa,pb); break; case(6): DestroyPolyn(pa); DestroyPolyn(pb); printf("成功销毁2个一元二项式\n"); printf("\n接下来要执行的操作:\n1 重新创建2个一元二项式 \n2 退出程序\n"); printf("执行:"); scanf("%d",&i); if(i==1) { // Polyn pa=0,pb=0,pc,pd,pf;//定义各式的头指针,pa与pb在使用前付初值NULL printf("请输入a的项数:"); scanf("%d",&m); pa=CreatePolyn(pa,m);// 建立多项式a printf("请输入b的项

数据结构课程设计多项式运算

#include #include #include"malloc.h" #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define NULL 0 typedef int Status; typedef struct ElemType{ float coef; //多项式系数 int exp; //多项式指数 }ElemType;//数据类型 typedef struct Polynomial{ ElemType data; struct Polynomial *next; }*Polyn,Polynomial;//多项式结构体 void Insert(Polyn p,Polyn head) { /*将新的结点插入链表,如果系数为零,则释放该结点; 如果指数为新时将结点直接插入;否则查找插入位置, 方法:比较该结点指数与首元结点及其他结点的指数, 直到该结点指数大于等于链表内某结点的指数,相等则合并这两项;大于则插入到其前驱*/ if(p->data.coef==0) {free(p);p=NULL;} //如果插入项的系数为零时,释放其结点将其删除

else { Polyn q1,q2; q1=head; q2=head->next; while(q2&& p->data.exp < q2->data.exp) { //查找多项式某项的插入位置,使多项式按指数降幂排列 q1=q2; q2=q2->next; } if(q2&& p->data.exp == q2->data.exp) { //将多项式指数相同相进行合并 q2->data.coef += p->data.coef; free(p); if(!q2->data.coef) { //如果多项式的系数为零的话,将其删除即释放期结点 q1->next=q2->next; free(q2); } } else { //如果是新建的多项式,指数为新时将结点插入 p->next=q2; q1->next=p; } } }

数据结构中实现一元多项式简单计算

数据结构中实现一元多项式简单计算: 设计一个一元多项式简单的计算器。 基本要求: 一元多项式简单计算器的基本功能为: (1)输入并建立多项式; (2)输出多项式; (3)两个多项式相加,建立并输出和多项式; (4)两个多项式相减,建立并输出差多项式; #include #include #define MAX 20 //多项式最多项数 typedef struct//定义存放多项式的数组类型 { float coef; //系数 int exp; //指数 } PolyArray[MAX]; typedef struct pnode//定义单链表结点类型 { float coef; //系数 int exp; //指数 struct pnode *next; } PolyNode; void DispPoly(PolyNode *L) //输出多项式 { PolyNode *p=L->next; while (p!=NULL) { printf("%gX^%d ",p->coef,p->exp); p=p->next; } printf("\n"); } void CreateListR(PolyNode *&L,PolyArray a,int n) //尾插法建表 { PolyNode *s,*r;int i; L=(PolyNode *)malloc(sizeof(PolyNode)); //创建头结点 L->next=NULL; r=L; //r始终指向终端结点,开始时指向头结点for (i=0;i

数据结构-多项式

一.实验目的: 理解线性表的基本逻辑结构,完成链表及循环链表的实现 通过实验进一步理解线性表的逻辑结构和存储结构,提高使用理论知识指导解决实际问题的能力,熟练掌握链表的实际应用。 二.实验内容: 题目:一元多项式运算 问题描述: 设计算法实现一元多项式的简单运算。 基本要求: (1)输入并建立多项式; (2)输出多项式; (3)多项式加法 (4)多项式减法。 测试数据: (1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7) (2)(6x-3-x+4.4x2-1.2x9)-(―6x―3-+5.4x2-x2+7.8x15) =(―7.8x15―1.2x9+12x―3―x) (3)(1+x+x2+x3+x4+x5)+(―x3―x4)=(1+x+x2+x5) (4)(x+x3)+(―x―x3)=0 (5)(x+x100)+(x100+x200)=(x+2x100+x200) (6)(x+x2+x3)+0=x+x2+x3 三. 实验方案(程序设计说明)

(一)算法设计思路: 1.将两个多项式的系数和指数分别存放在新建的两个链表中; 2.其中一个链表A的指针不动,遍历另一个链表B,指数相等 时系数相加,删除该数,链表B从头开始,链表A移向下个 数据域; 3.直到链表B为空或者链表A遍历完成结束。 (二)算法流程图:

(三)界面设计说明: 请输入多项式的长度: 开始 输入多项式长 度N 以及系数 m,指数n A →n= B →n? Y N j++ 系数相加存放在A 表 i++ 结束 创建链表A ,B ,链表A 从i=0 开始循环,链表B 从j=0开始 i>N? N Y i>N? N Y

数据结构一元多项式的加减乘

#ifndef _POL YNOMIAL_H #define _POL YNOMIAL_H #include using namespace std; #include //#define ElemType char typedef struct // 项的表示,多项式的项作为LinkList的数据元素 { float coef; // 系数 int expn; // 指数 }term, ElemType; typedef struct LNode // 结点类型 { ElemType data; struct LNode *next; }LNode,*Link,*Position; typedef struct LinkList // 链表类型 { Link head,tail; // 分别指向线性链表中的头结点和最后一个结点 int len; // 指示当前线性链表中数据元素的个数 }LinkList; typedef LinkList polynomial; void InitList(LinkList &P); void CreatPolyn(polynomial &P,int m); void DestroyPolyn(polynomial &P); void CreatePolyn(polynomial &P,int m);//建立表示一元多项式的有序链表P void DestroyPolyn(polynomial &P);//销毁一元多项式P void PrintPolyn(polynomial P);//打印 int PolyLength(polynomial P);//项数 void AddPolyn(polynomial &Pa,polynomial &Pb);//相加运算 void SubtractPolyn(polynomial &Pa,polynomial &Pb);//相减运算 void MultiplyPolyn(polynomial &P,polynomial &Pa,polynomial &Pb);//相乘运算 int cmp(term a,term b);//依a的指数值<(或=)(或>)b的指数值,分别返回-1,0,+1 int LocateElemP(LinkList L,ElemType e,Position *q, int(*compare)(ElemType,ElemType)); int MakeNode(Link *p,ElemType e); int InsFirst(LinkList *L,Link h,Link s);

数据结构一元多项式的计算

课程设计成果 学院: 计算机工程学院班级: 13计科一班 学生姓名: 学号: 设计地点(单位): 设计题目:一元多项式的计算 完成日期:年月日 成绩(五级记分制): _________________ 教师签名:_________________________ 目录 1 需求分析 ......................................................................... 错误!未定义书签。 2 概要设计 ......................................................................... 错误!未定义书签。 2.1一元多项式的建立 ............................................................... 错误!未定义书签。 2.2显示一元多项式 ................................................................... 错误!未定义书签。 2.3一元多项式减法运算 ........................................................... 错误!未定义书签。 2.4一元多项式加法运算 ........................................................... 错误!未定义书签。 2.5 设计优缺点.......................................................................... 错误!未定义书签。3详细设计 .......................................................................... 错误!未定义书签。 3.1一元多项式的输入输出流程图........................................... 错误!未定义书签。 3.2一元多项式的加法流程图................................................... 错误!未定义书签。 3.3一元多项式的减法流程图.................................................. 错误!未定义书签。 3.4用户操作函数....................................................................... 错误!未定义书签。4编码 .................................................................................. 错误!未定义书签。5调试分析 .......................................................................... 错误!未定义书签。4测试结果及运行效果...................................................... 错误!未定义书签。5系统开发所用到的技术.................................................. 错误!未定义书签。参考文献 ............................................................................. 错误!未定义书签。附录全部代码................................................................... 错误!未定义书签。

C++一元多项式合并实验报告

实验二一元多项式相加问题本实验的目的是进一步熟练掌握应用链表处理实际问题的能力。 一、问题描述 一元多项式相加是通过键盘输入两个形如P 0+P 1 X1+P 2 X2+···+PnX n的多项式,经过程序运算后在屏幕上输出它 们的相加和。 二、数据结构设计 分析任意一元多项式的描述方法可知,一个一元多项式的每一个子项都由“系数—指数”两部分组成,所以可将它抽象成一个由“系数—指数对”构成线性表,由于对多项式中系数为0的子项可以不记录他的数值,对于这样的情况就不再付出存储空间来存放它了。基于这样的分析,可以采取一个带有头结点的单链表来表示一个一元多项式。具体数据结构定义为: typedef struct node { float ce; //系数域 float ex; //指数域 struct node *next; //指针域 }lnode,*linklist; 三功能(函数)设计 1、输入并建立多项式的功能模块 此模块要求按照指数递增的顺序和一定的输入格式输入各个系数不为0的子项的“系数—指数对”,输入一个子项建立一个相关的节点,当遇到输入结束标志时结束输入,而转去执行程序下面的部分。 屏幕提示: input ce & ex and end with 0: ce=1 ex=2 ce=0 ex=0 //输入结束标志 input ce & ex and end with 0: ce=2 ex=2 ce=0 ex=0 //输入结束标志 输入后程序将分别建立两个链表来描述两个一元多项式: A=X^2 B=2X^2 这两个多项式的相加的结果应该为: C=3X^2 2、多项式相加的功能模块 此模块根据在1中建立的两个多项式进行相加运算,并存放在以C为头指针的一个新建表中。可以采用以下方法进行设计: 开始时a,b分别指向A,B的开头,如果ab不为空,进行判断:如果a所指的结点的指数和b所指的结点的指数相同,将它们的系数相加做成C式中的一项,如果不一样则将小的一项加到C中。 if(a->ex==b->ex) //判断指数是否相等 {s->ce=a->ce+b->ce; if(s->ce!=0) s->ex=a->ex; else delete s; a=a->next; b=b->next; }

C语言一元多项式计算

C语言一元多项式计算集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

#include <> #include <> #include <> #define LEN sizeof(node) //结点构造 typedef struct polynode { int coef; //系数 int exp; //指数 struct polynode *next; }node; node * create(void) { node *h,*r,*s; int c,e; h=(node *)malloc(LEN); r=h; printf("系数:"); scanf("%d",&c); printf("指数:"); scanf("%d",&e); while(c!=0) { s=(node *)malloc(LEN); s->coef=c; s->exp=e; r->next=s; r=s; printf("系数:"); scanf("%d",&c); printf("指数:"); scanf("%d",&e); } r->next=NULL; return(h);

} void polyadd(node *polya, node *polyb) { node *p,*q,*pre,*temp; int sum; p=polya->next; q=polyb->next; pre=polya; while(p!=NULL&&q!=NULL) { if(p->exp>q->exp) { pre->next=p; pre=pre->next; p=p->next; } else if(p->exp==q->exp) { sum=p->coef+q->coef; if(sum!=0) { p->coef=sum; pre->next=p;pre=pre->next;p=p->next; temp=q;q=q->next;free(temp); } else { temp=p->next;free(p);p=temp; temp=q->next;free(q);q=temp; } } else { pre->next=q; pre=pre->next; q=q->next; } } if(p!=NULL) pre->next=p; else pre->next=q; } void print(node * p) {

数据结构 多项式 实验报告

数据结构实验报告 实验名称:实验一——多项式的实现 学生姓名: 班级: 班内序号: 学号: 日期:2011年10月29日 1.实验要求 实验目的: 1.熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 2.学习指针、模板类、异常处理的使用 3.掌握线性表的操作的实现方法 4.学习使用线性表解决实际问题的能力 实验内容: 利用线性表实现一个一元多项式Polynomial f(x) = a0 + a1x + a2x2 + a3x3+ … + a n x n 要求: 1.能够实现一元多项式的输入和输出 2.能够进行一元多项式相加 3.能够进行一元多项式相减 4.能够计算一元多项式在x处的值 5.能够计算一元多项式的导数(选作) 6.能够进行一元多项式相乘(选作) 7.编写测试main()函数测试线性表的正确性 2. 程序分析 由于多项式是线性结构,故选择线性表来实现,在这个程序中我采用的是单链表结构,每个结点代表一个项,多项式的每一项可以用其系数和指数唯一的表示。如果采用顺序存储,那么对于结点的插入和删除的操作会比较麻烦,而且顺序表的结点个数固定,对于可能发生的情况无法很好的处理,而采用链表就会简单许多,还能自由控制链表的长度。 两个多项式要进行多次的计算,为了保护原始的数据,方便进行以后的计算,故选择把结果存储在一个新建的链表里。 本程序完成的主要功能: 1.输入和输出:需要输入的信息有多项式的项数,用来向系统动态申请内存;多项式

各项的系数和指数,用来构造每个结点,形成链表。输出即是将多项式的内容 向屏幕输出。 2.多项式相加与相减:多项式的加减要指数相同即是同类项才能实现,所以在运算时 要注意判断指数出现的各种不同的情况,分别写出计算方法。将每项运算得到 的结果都插入到新的链表中,形成结果多项式。 3.多项式的求导运算:多项式的求导根据数学知识,就是将每项的系数乘以指数,将 指数减1即可,将每项得到的结果插入到结果多项式的链表中。 4.多项式在某点的值:由用户输入x的值,然后求出每项的值相加即可。 2.1 存储结构 本程序采用的存储结构是单链表结构,其定义的结点包括三部分:系数、指数以及下一个结点的地址。示意图如下: 1.输入多项式 ·自然语言描述: 1.设置多项式的项数n; 2.按照多项式的项数申请动态数组coef[]和expn[]存储多项式的系数和指数; 3.按照指数递增的次序输入各项的系数以及指数,分别存入coef和expn; 4.再将输入的系数以及指数赋给每一个结点的coef和expn域; 5.利用头插法将每个结点加入链表。 ·伪代码: 1.输入项数n; 2.float* coef1=new float[n1]; int* expn1=new int[n1]; 3.运用for循环,循环n次 3.1 term* s=new term; 3.2 s->coef=coef[i]; 3.3 s->expn=expn[i]; 3.4 r->next=s; 3.5 r=s; 4. 运用头插法将结点插入链表。 时间复杂度: 空间复杂度: 2.输出多项式 ·自然语言描述: 1.获取头结点; 2.循环n-1次(n为多项式的项数) 2.1将指针的指向后移; 2.2依照多项式的各种情况,设置输出方式 2.2.1 系数为1且指数不为1和0,输出x^expn+; 2.2.2 系数不为0且指数为0,输出(coef)+; 2.2.3 系数不为0且指数为1,输出(coef)x+;

一元多项式的计算数据结构课程设计

一元多项式的计算—加,减 摘要(题目)一元多项式计算 任务:能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、相减,并将结果输入; 目录 1.引言 2.需求分析 3.概要设计 4.详细设计 5.测试结果 6.调试分析 7.设计体会 8.结束语 一:引言: 通过C语言使用链式存储结构实现一元多项式加法、减法和乘法的运算。按指数

降序排列。 二:需求分析 建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果 三:概要设计 存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。 1.单连表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0} 数据关系:R1={| ai-1, ai∈D,i=2,…,n} 基本操作: InitList(&L) //操作结果:构造一个空的线性表 CreatPolyn(&L) //操作结果:构造一个以单连表存储的多项试 DispPolyn(L) //操作结果:显示多项试 Polyn(&pa,&pb) //操作结果:显示两个多项试相加,相减的结果 } ADT List 2.本程序包含模块: typedef struct LNode //定义单链表 { }LNode,*LinkList; void InitList(LinkList &L) //定义一个空表 { } void CreatPolyn(LinkList &L) //用单链表定义一个多项式 { } void DispPolyn(LinkList L) //显示输入的多项式

链表实现多项式相加实验报告

实验报告 课程名称:数据结构 题目:链表实现多项式相加 班级: 学号: 姓名: 完成时间:2012年10月17日

1、实验目的和要求 1)掌握链表的运用方法; 2)学习链表的初始化并建立一个新的链表; 3)知道如何实现链表的插入结点与删除结点操作; 4)了解链表的基本操作并灵活运用 2、实验内容 1)建立两个链表存储一元多项式; 2)实现两个一元多项式的相加; 3)输出两个多项式相加后得到的一元多项式。 3、算法基本思想 数降序存入两个链表中,将大小较大的链表作为相加后的链表寄存处。定义两个临时链表节点指针p,q,分别指向两个链表头结点。然后将另一个链表中从头结点开始依次与第一个链表比较,如果其指数比第一个小,则p向后移动一个单位,如相等,则将两节点的系数相加作为第一个链表当前节点的系数,如果为0,则将此节点栓掉。若果较大,则在p前插入q,q向后移动一个,直到两个链表做完为止。 4、算法描述 用链表实现多项式相加的程序如下: #include #include #include struct node{ int exp; float coef; struct node*next; };

void add_node(struct node*h1,struct node*h2); void print_node(struct node*h); struct node*init_node() { struct node*h=(struct node*)malloc(sizeof(struct node)),*p,*q; int exp; float coef=1.0; h->next=NULL; printf("请依次输入多项式的系数和指数(如:\"2 3\";输入\"0 0\"时结束):\n"); p=(struct node*)malloc(sizeof(struct node)); q=(struct node*)malloc(sizeof(struct node)); for(;fabs(coef-0.0)>1.0e-6;) { scanf("%f %d",&coef,&exp); if(fabs(coef-0.0)>1.0e-6) { q->next=p; p->coef=coef; p->exp=exp; p->next=NULL; add_node(h,q); } } free(p); free(q); return(h); } void add_node(struct node*h1,struct node*h2) { struct node*y1=h1,*y2=h2; struct node*p,*q; y1=y1->next; y2=y2->next; for(;y1||y2;) if(y1) { if(y2) { if(y1->expexp) y1=y1->next; else if(y1->exp==y2->exp) { y1->coef+=y2->coef; if(y1->coef==0)

数据结构-多项式相加

数据结构课程设计 2012年12月 班级:XXX 学号:XXX 姓名: XXX 指导教师:XXX

一元稀疏多项式计算器 【问题描述】 设计一个一元稀疏多项式简单计算器 【基本要求】 一元多项式简单计算器的基本功能是: 1,输入并建立多项式; 2,输出多项式,输出形式为整数序列:n,c1,e1,c2,c2,...,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 3,多项式a和b相加,建立多项式a+b; 4,多项式a和b相减,建立多项式a-b. 【算法设计思想】 ①一般情况下的一元n次多项式可写成pn(x)=p1xe1+p2xe2+……+pmxem 其中,p1是指数为ei的项的非零系数,且满足0≦e1

【实现提示】 用带表头结点的单链表存储多项式。 【程序代码】 #include #include typedef struct node { float coef; int expn; struct node *next; }Lnode, *polynmial; void create(polynmial &L); //输入并建立多项式L void display(polynmial L); //显示,输出多项式L void sort(polynmial &L); //多项式L按指数排序 void reverse(polynmial &L); //逆置 void select(); //用户选择加减操作 void add(polynmial La, polynmial Lb, polynmial &Lc); //多项式La,Lb相加void subtract(polynmial La, polynmial Lb, polynmial &Ld); //多项式La减去Lb,结果给Ld void create(polynmial &L) //输入并建立多项式L { int i, n; static struct node *p; scanf("%d", &n); L = (struct node *)malloc (sizeof(struct node)); L->next = NULL; for(i = 0; i < n; i++) { p = (struct node *)malloc(sizeof(struct node)); scanf("%f %d", &p->coef, &p->expn); p->next = L->next; L->next = p; } } void display(polynmial L)//显示,输出多项式L { struct node *p, *q; int flag = 0; int k = 0; q = L->next; while(q)

数据结构一元多项式报告

一元多项式计算: 程序要求: 1)、能够按照指数降序排列建立并输出多项式; 2)、能够完成两个多项式的相加、相减,并将结果输入。 概要设计: 1.功能:将要进行运算的多项式输入输出。 2.数据流入:要输入的多项式的系数与指数。 3.数据流出:合并同类项后的多项式。 4.程序流程图:多项式输入流程图如图3.2.1所示。 5.测试要点:输入的多项式是否正确,若输入错误则重新输入 2、多项式的加法 (1)功能:将两多项式相加。 (2)数据流入:输入函数。 (3)数据流出:多项式相加后的结果。 (4)程序流程图:多项式的加法流程图如图3.2.2所示。 (5)测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算。

3、多项式的减法 (1)功能:将两多项式相减。 (2)数据流入:调用输入函数。 (3)数据流出:多项式相减后的结果。 (4)程序流程图:多项式的减法流程图如图3.2.3所示。 (5)测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算。

详细代码: #include #include #include using namespace std; struct Node { float coef;//结点类型 int exp; }; typedef Node polynomial;

struct LNode { polynomial data;//链表类型 LNode *next; }; typedef LNode* Link; void CreateLink(Link &L,int n); void PrintList(Link L); void PolyAdd(Link &pc,Link pa,Link pb); void PolySubstract(Link &pc,Link pa,Link pb); void CopyLink(Link &pc,Link pa); void PolyMultiply(Link &pc,Link pa,Link pb); int JudgeIfExpSame(Link pa,Link e); void DestroyLink(Link &L); int CompareIfNum(int i); void DestroyLink(Link &L) { Link p; p=L->next; while(p) { L->next=p->next; delete p; p=L->next; } delete L; L=NULL; } //创建含有n个链表类型结点的项,即创建一个n项多项式void CreateLink(Link &L,int n) { if(L!=NULL) { DestroyLink(L); } Link p,newp; L=new LNode; L->next=NULL; (L->data).exp=-1;//创建头结点 p=L; for(int i=1;i<=n;i++) { newp=new LNode; cout<<"请输入第"<

一元多项式相加完整实验报告

一元多项式相加实验报告 一元多项式的相加

一实验内容 根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加 二需求分析 1掌握线性结构的逻辑特性和物理特性。 2建立一元多项式。 3将一元多项式输入,并存储在内存中,并按照指数降序排列输出多项式。 4能够完成两个多项式的加减运算,并输出结果。 三概要设计 1 本程序所用到的抽象数据类型: typedef OrderedLinkList polynomial; // 用带表头结点的有序链表表示多项式 结点的数据元素类型定义为: typedef struct { // 项的表示 float coef; // 系数 int expn; // 指数 term, ElemType; V oid AddPolyn(polynomail&Pa,polynomail&Pb) Position GetHead() Position NextPos(LinkList L,Link p) Elem GetCurElem(Link p) int cmp(term a term b) Status SetCurElem(Link&p, ElemType e) Status DelFirst(Link h, Link &q) Status ListEmpty(LinkList L) Status Append(LinkList&L, Link S) FreeNode() 2 存储结构

一元多项式的表示在计算机内用链表来实现,同时为了节省存储空间,只存储其中非零的项,链表中的每个节点存放多项式的系数非零项。它包含三个域,分别存放多项式的系数,指数,以及指向下一个项的指针。 创建一元多项式链表,对运算中可能出现的各种情况进行分析,实现一元多项式的相加相减操作。 3 模块划分 a) 主程序;2)初始化单链表;3)建立单链表; 4)相加多项式 4 主程序流程图 四详细设计 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项,对

相关文档
最新文档