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

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

《数据结构》实验报告

1、实验名称:实现一元多项式的加法

2、实验日期: 2011-3-7

3、基本要求:

1)编程实现一元多项式的加法;

2)设计一个测试主函数。

4、实验目的:

通过实验使学生掌握链表的最基本和最主要的操作:插入和删除操作。

5、测试数据:

随意输入两个一元多项式的系数和指数:

第一个:系数:4 8 6 7;指数:2 3 4 5

第二个:系数:5 9 3 8;指数:1 3 5 6

两式相加后输出结果。

6、算法思想或算法步骤:

1)用尾插入法创建单链表

(PLoy *create_Ploy_LinkList(void))

2)输出单链表中所有结点的值,得到一元多项式

(void output_Ploy_LinkList(PLoy *L, char ch))

3)进行多项式的相加,采用链式存储表示加法,根据结点类型定义,若指数不同,则进行链表的合并;若指数相同,则进行系数相加;

若和为0,则去掉结点;若和不为0,则修改结点的系数域。(PLoy *add_ploy(PLoy *La, PLoy *Lb))

7、模块划分:

1)头文件stdiob.h。头文件stdiob.h中包括:结点结构体定义、一元多项式的系数和指数的输入、一元多项式的输出以及两式相加输出结果的操作等;

2)实现文件yydxsxj.cpp。包含主函数int main(),其功能是测试所设计的一元多项式加法的正确性。

8、数据结构:

链表中的结点的结构体定义如下:

typedef struct Node

{

float coef; /*系数部分*/

int expn; /*指数部分*/

struct Node *next ;

} PloyNode;

9、源程序:

源程序存放在两个文件中,即头文件stdiob.h和实现文件yydxsxj.cpp。

//头文件stdiob.h

typedef struct Node

{

float coef; /*系数部分*/

int expn; /*指数部分*/

struct Node *next ;

} PloyNode;

PloyNode *create_Ploy_LinkList(void)

{

/* 尾插入法创建单链表,链表的头结点head作为返回值 */ float coef ; int expn ;

PloyNode *head, *p, *q;

head=p=(PloyNode *)malloc(sizeof(PloyNode));

p->next=NULL; /* 创建单链表的表头结点head */

while (1)

{

printf("\n请输入一元多项式的系数(0表示结束): ") ;

scanf("%f",&coef);

if (coef==0) break ;

else

{

printf("\n请输入一元多项式的指数: ") ;

scanf("%d",&expn);

q=(PloyNode *)malloc(sizeof(PloyNode));

q->coef=coef ; /* 指数部分赋值 */

q->expn=expn ; /* 系数部分赋值 */

q->next=p->next; p->next=q; p=q ;

/* 钩链,新创建的结点总是作为最后一个结点 */ }

}

return(head);

}

void output_Ploy_LinkList(PloyNode *L, char ch)

/* 输出以L为头结点的单链表中所有结点的值 */ {

PloyNode *p;

p=L->next; /* 使p指向第一个结点 */

if (p==NULL) printf("\n此多项式为空!!\n\n") ;

else

{

printf("f(x)= \n",ch) ;

while (p!=NULL)

{

if (p->coef>0)

printf("%+g",p->coef) ;

else printf("%g",p->coef) ;

if (p->expn!=0)

{

printf("X^") ;

printf("%d",p->expn);

}

p=p->next;

}

} /* 移动指针p */

printf("\n\n") ;

}

PloyNode *add_Ploy(PloyNode *La, PloyNode *Lb)

{

PloyNode *Lc , *pc , *pa , *pb ,*ptr ; float x ;

Lc=pc=La ; pa=La->next ; pb=Lb->next ;

if(pa==NULL&&pb==NULL)printf("两个式子之和也为空项");

while (pa!=NULL&&pb!=NULL)

{

if (pa->expn< pb->expn)

{

pc->next=pa ; pc=pa ; pa=pa->next ; } else

{

if (pa->expn>pb->expn)

{ pc->next=pb ; pc=pb ; pb=pb->next ; }

else

{

x=pa->coef+pb->coef ;

if (x==0)

{ ptr=pa ; pa=pa->next ;

ptr=pb ; pb=pb->next ;

}

else

{ pc->next=pa ; pa->coef=x ;

pc=pa ; pa=pa->next ;

ptr=pb ; pb=pb->next ;

}

}

}

}

if (pa==NULL) pc->next=pb ;

相关文档
最新文档