数据结构线性表的应用实验报告Word文档下载推荐.docx

上传人:b****5 文档编号:19917955 上传时间:2023-01-12 格式:DOCX 页数:17 大小:77.90KB
下载 相关 举报
数据结构线性表的应用实验报告Word文档下载推荐.docx_第1页
第1页 / 共17页
数据结构线性表的应用实验报告Word文档下载推荐.docx_第2页
第2页 / 共17页
数据结构线性表的应用实验报告Word文档下载推荐.docx_第3页
第3页 / 共17页
数据结构线性表的应用实验报告Word文档下载推荐.docx_第4页
第4页 / 共17页
数据结构线性表的应用实验报告Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数据结构线性表的应用实验报告Word文档下载推荐.docx

《数据结构线性表的应用实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构线性表的应用实验报告Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

数据结构线性表的应用实验报告Word文档下载推荐.docx

7)多项式相乘:

编写一个函数,求两个多项式的乘积多项式。

3.算法说明:

1)多项式的建立、显示和相加算法见讲义。

可修改显示函数,使输出的多项式更符合表达规范。

2)多项式减法:

同次项的系数相减(缺项的系数是0)。

例如a(x)=-5x2+2x+3,b(x)=-4x3+3x,则a(x)-b(x)=4x3-5x2-x+3。

提示:

a(x)-b(x)=a(x)+(-b(x))。

3)多项式乘法:

两个多项式的相乘是“系数相乘,指数相加”。

算法思想是用一个多项式中的各项分别与另一个多项式相乘,形成多个多项式,再将它们累加在一起。

例如,a(x)=-5x2+2x+3,b(x)=-4x3+3x,则a(x)*b(x)=(-4x3)*(-5x2+2x+3)+(3x)*(-5x2+2x+3)=(20x5-8x4-12x3)+(-15x3+6x2+9x)=20x5-8x4-27x3+6x2+9x。

4.实验步骤:

根据实验报告的要求,我对文件夹里的C文件进行了丰富和修改,步骤如下:

链表结构建立多项式:

typedefstructpolynode

{floatcoef;

//系数

intexp;

//指数

structpolynode*next;

//下一结点指针

}PNode;

编写函数,实现多项式的加法运算;

PNode*PolyAdd(PNode*f1,PNode*f2)//实现加法功能。

{//实现两多项式(头指针分别为f1和f2)相加,返回和多项式f3=f1+f2。

PNode*pa=f1->

next,*pb=f2->

next,*pc,*f3,*q;

floatcoef;

f3=(PNode*)malloc(sizeof(PNode));

//建立头指针

f3->

exp=-1;

//对头指针初始化

next=f3;

pc=f3;

//将pc指向头指针

while(pa->

exp!

=-1||pb->

=-1)//返回头指针时,跳出循环

{

if(pa->

exp>

pb->

exp)

{

exp=pa->

exp;

coef=pa->

coef;

pa=pa->

next;

}

elseif(pa->

exp<

exp=pb->

coef=pb->

pb=pb->

else

{

coef+pb->

if(coef!

=0)

{

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

//建立新的q指针存放负指数的指针

q->

exp=exp;

coef=coef;

//将q插入链表中

next=pc->

pc->

next=q;

pc=q;

}

}

returnf3;

//返回

}

实现多项式的显示;

voidShowPloy(PNode*h)

//用if语句判断,当指数为0是,只输出系数;

当指数为1时,输出系数和X;

当系数为1时,输出X和指数。

{

h=paixu(h);

//整理函数,使之降幂排列

PNode*p=h->

if(p==h)

{

printf("

表达式为空\n"

);

return;

if(p->

coef==1)

x^%d"

p->

exp);

//用if语句判断,若输出x^o和x^1值为0和1直接输出数据。

elseif(p->

exp==1)

%gx"

p->

coef);

exp==0)

%g"

else

%gx^%d"

coef,p->

p=p->

while(p!

=h)

if(p->

coef>

0)

printf("

+"

//系数为负,不用输出加号

elseif(p->

else

p=p->

}

printf("

\n"

主函数

voidmain()

PNode*F1,*F2,*F3;

floatx;

F1=CreatPoly();

F2=CreatPoly();

\nf1(x)="

ShowPloy(F1);

\nf2(x)="

ShowPloy(F2);

F3=PolyAdd(F1,F2);

F3=paixu(F3);

\nf1+f2=:

"

ShowPloy(F3);

F3=PolySub(F1,F2);

\nf1-f2=:

F3=PolyMult(F1,F2);

\nf1*f2=:

\nx的值为:

"

scanf("

%f"

&

x);

\nf1(x=%.3f)=%.3f\n"

x,PolyValue(F1,x));

多项式求值

doublePolyValue(PNode*h,floatx){

//编写算法,求以h为头指针的多项式在x点的值并返回该值。

doublef=0.0;

//求出f=f(x);

PNode*pa;

pa=h->

while(pa->

=-1)//使用f+=coef*pow,返回f

f+=(pa->

coef)*pow(x,pa->

pa=pa->

returnf;

多项式相减

PNode*PolySub(PNode*f1,PNode*f2)

{//编写此算法,实现两多项式(头指针分别为f1和f2)相减,返回差多项式f3=f1-f2。

next,*pc,*f3,*q,*head;

//头指针的初始化

//pc指向头指针,便于操作。

while(pb->

=-1)//返回头指针时,跳出循环。

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

q->

coef=pb->

coef*(-1);

exp=pb->

pc->

pc=q;

pb=pb->

head=PolyAdd(f1,f3);

//调用加法函数做减法

returnhead;

//返回头指针

多项式相乘

PNode*PolyMult(PNode*f1,PNode*f2)

{//实现两多项式(头指针分别为f1和f2)相乘,返回乘积多项式f3=f1*f2。

next,*pc,*u,*head;

head=(PNode*)malloc(sizeof(PNode));

head->

next=head;

pc=head;

=-1)//多项式相乘,录入u指针,查到头指针。

while(pb->

=-1)

coef=pa->

coef*pb->

exp=pa->

exp+pb->

u=(PNode*)malloc(sizeof(PNode));

u->

next=u;

pc=u;

程序运行截图

测试成功~!

程序完整源代码如下:

#include<

stdio.h>

stdlib.h>

math.h>

PNode*paixu(PNode*f)//将多项式降幂排列

PNode*p,*q,*r,*p0,*q0;

p=f->

q=p->

p0=f;

q0=p;

while(p->

=-1)//p为q的前驱,q与p指数指数值进行比较,

while(q->

=-1)//q为头指针推出循环,q移动一圈

if(p->

q->

exp)//比较,若p大于q则q后移

q0=q;

q=q->

elseif(p->

exp)//若p小于q则q插入p之前

r=q->

q->

next=p0->

q0->

next=r;

p0->

p=q;

q=r;

exp==q->

exp)//若相等,p的coef与q的相加,然后删除q节点,释放q的空间

p->

coef+=q->

next=q->

p0=p;

q=p->

q0=p;

PNode*CreatPoly()//建立多项式链表,返回头指针

{

PNode*head,*p,*s;

inti,n;

p=head;

多项式的项数为:

%d"

&

n);

for(i=1;

i<

=n;

i++)

s=(PNode*)malloc(sizeof(PNode));

请输入多项式第%d项的系数和指数(用逗号隔开):

i);

scanf("

%g,%d"

s->

coef,&

p->

next=s;

p=s;

p->

voidFreePoly(PNode*h)

//编写此算法,将以h为头指针的多项式的链表结点逐个释放。

PNode*p,*q;

p=h->

exp)!

+-1;

free(p);

p=q;

free(h);

return;

//Free函数用于销毁链表,最后指向头指针,跳出循环并释放头指针。

doublePolyValue(PNode*h,floatx)//实现多项式求值功能。

利用指针求出每一项的值,再用加法加起来。

实验总结:

这次试验提高了我的编程能力,让我认识到了我C语言的不足之处。

也使我了解了线性链表是具有链接存储结构的线性表,它用节点存放线性表中的数据元素,逻辑上相邻的节点不能随机存取,因为这个原因我前期的程序一直出错,以后编程序的时候要牢记。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1