好文档 - 专业文书写作范文服务资料分享网站

数据结构实验报告完成多项式的运算

天下 分享 时间: 加入收藏 我要投稿 点赞

希望对大家有所帮助,多谢您的浏览!

简单介绍:

本次作业力在学会链表表示线性表的插入、删除、查找等基本操作设计与实现,学习利用链表提供的接口去求解实际问题,同时熟悉链表的的存储方法。再基于线性链表的基础设计完成多项式的相加运算程序。

一、 实验目的和要求

完成多项式的相加、相乘运算。

(1)掌握线性表的插入、删除、查找等基本操作设计与实现 (2)学习利用线性表提供的接口去求解实际问题 (3)熟悉线性表的的存储方法 二、 实验内容和原理

1.实验内容

设计一个一元多项式的简单计算程序,其基本功能有:(1)输入并建立多项式;(2)输出多项式;(3)多项式的相加运算。利用单链表实现。

2.实验原理

使用单链表实现一元多项式的存储,并实现两个一元多项式的加法运算。

三、 实验环境

硬件:(1)学生用微机(2)多媒体教室或远程教学(3)局域网环境 软件:(1)Windows XP中文操作系统 (2)VC6.0

四、 算法描述及实验步骤

1、

描述:

加法:输入建立一元多项式,进行简单加法运算,输出结果;通过建立单链表A

和B分别存放多项式的a和b的各项系数及指数;并且利用A使得不产生新的节点而在A中存放数据运算结果;该过程通过定义指针变量p和q使它们分别指向两个多项式的第一个节点,之后依次比较它们所指向的项的指数,即一种情况指数相等时系数相加且和不为零,修改当前p所指项的系数(和),同时删除q所指项,若和为零则同时删除p和q各自所指;情况二,p当前项指数大于q当前项,将q所指插入p所指之前作为结果项之一;情况三,p当前项指数小于q当前项,p所指作为多项式和的一项,移动p指向下一项,进行比较,在移动p,q至其中以个链空,把另一个链余下节点插在p所指之后;

乘法:

授课:XXX

希望对大家有所帮助,多谢您的浏览!

定义指针p,q指向所操作节点,通过A链表的每一项与B链表各项相乘,指数相加,系数相乘,将值赋给新节点各自域,构成一新的链表,最后返回头结点。 可这样有一个问题,即新生成的链表,即最终结果混乱,没有对数据进行过滤,相同指数项应在执行加法运算,所以可以这样实现,通过A链表的每一项与B链表各项相乘的新生成节点单独构成一链表,并将第一个链表加入另一新链表,循环此操作将后生成的链表加之先前的链表,即可实现排序问题。 1)加法算法如下:

polynomial * polyadd(polynomial *A, polynomial *B) { polynomial *p,*q,*s,*r; float x; p=A->next; q=B->next; s=p;

while((p!=NULL)&&(q!=NULL))

if((p->exp)>(q->exp)) {

r=q->next; q->next=p; s->next=q;

s=q; }

else if((p->exp)<(q->exp)) {s=p; p=p->next;} else

{x=(p->coef)+(q->coef);

/*if(x!=0) {p->coef=x;

s=p;} q=r;

else

{s->next=p->next;

free(p);}*/

p=s->next; r=q; q=q->next; free(r);}

授课:XXX

希望对大家有所帮助,多谢您的浏览!

if(q!=NULL) s->next=q; free(B); return A;} 2) 乘法算法

polynomial * polyand(polynomial *A, polynomial *B) /*核心算法实现两链表的乘法运算*/

{ polynomial * p,* q,* n,* head,* r,* temp,* m; //定义当前指针p,q风别指向两链表和头指针,尾指针,及新生成节点n int exp; //定义整型指数 float coef; //定义浮点型系数

head=(polynomial *)malloc(sizeof(polynomial)); //创头节点为新生链表准备

head->next=NULL; //置空链表

r=head; //临时变量,为后移指针做准备 p=A->next; //当前指针跳过A链表头指向实际运算数 while(p!=NULL) //控制操作,循环A链表与内部while所控制B链表进行项之间的运算 {

temp=(polynomial *)malloc(sizeof(polynomial)); //在内部创头节点为新生链表准备 即A中每一项与B中各项相乘构成一新链表 temp->next=NULL; //置空链表

m=temp; //临时变量,为后移指针做准备 q=B->next; //当前指针跳过B链表头指向实际运算数 while(q!=NULL) { }

p=p->next; //控制A链表下一项

授课:XXX

n=(polynomial *)malloc(sizeof(polynomial)); //建立新节点 exp=p->exp+q->exp; //进行系数相加操作 coef=p->coef*q->coef; // //进行指数相乘操作 n->coef=coef; //赋值新节点的系数域 n->exp=exp; //赋值新节点的指数域 m->next=n; //链接节点至头结点,构成链表 m=m->next; //后移指针,为下一节点做准备 q=q->next; //控制B链表下一项 //printf(\调试用

数据结构实验报告完成多项式的运算

希望对大家有所帮助,多谢您的浏览!简单介绍:本次作业力在学会链表表示线性表的插入、删除、查找等基本操作设计与实现,学习利用链表提供的接口去求解实际问题,同时熟悉链表的的存储方法。再基于线性链表的基础设计完成多项式的相加运算程序。一、实验目的和要求完成多项式的相加、相乘运算。(1)掌握线性表的插入
推荐度:
点击下载文档文档为doc格式
9e3wj2bqcx2mdyx423a46cyp27lzc201br7
领取福利

微信扫码领取福利

微信扫码分享