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

上传人:b****9 文档编号:25577297 上传时间:2023-06-09 格式:DOCX 页数:16 大小:155.14KB
下载 相关 举报
fname数据结构课程设计报告一元多项式的计算.docx_第1页
第1页 / 共16页
fname数据结构课程设计报告一元多项式的计算.docx_第2页
第2页 / 共16页
fname数据结构课程设计报告一元多项式的计算.docx_第3页
第3页 / 共16页
fname数据结构课程设计报告一元多项式的计算.docx_第4页
第4页 / 共16页
fname数据结构课程设计报告一元多项式的计算.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

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

《fname数据结构课程设计报告一元多项式的计算.docx》由会员分享,可在线阅读,更多相关《fname数据结构课程设计报告一元多项式的计算.docx(16页珍藏版)》请在冰豆网上搜索。

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

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

题目:

一元多项式的计算

 

班级_____软件1102______

姓名_______朱正品_______

学号_____112001230______

 

一元多项式的加减

一.实验课题:

运用数据结构的知识编写一个程序,要求此程序能够进行2个一元多项式的加减,并将答案输出在屏幕上。

二.问题分析:

一元多项式可以看做是n个元素的相加,而这n个元素的唯一差别就在于系数和指数,运用数据结构的知识可以通过将2个一元多项式的系数和指数分别存储在2个线性表中,然后通过线性表的检索比较指数,若指数相同就将系数相加,将结果存储在另一个线性表中。

三.程序运行环境:

MicrosoftVisualStudio

 

四:

概要设计

存储结构:

一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。

链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。

创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。

1.单连表的抽象数据类型定义:

ADTList{数据对象:

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)

//操作结果:

显示两个多项试相加,相减的结果

}ADTList

2.本程序包含模块:

typedefstructLNode//定义单链表

{

}LNode,*LinkList;

voidInitList(LinkList&L)//定义一个空表

{}

voidCreatPolyn(LinkList&L)//用单链表定义一个多项式

{}

voidDispPolyn(LinkListL)//显示输入的多项式

{}

voidPolyn(LinkList&pa,LinkList&pb)

{}

voidmain()

{

//定义一个单连表;

cout<

***************"<

LNode*L1,*L2;

Polyn(L1,L2);}

2.1加,减操作模块——实现加减操作

各模块之间的调用关系如下:

 

主程序模块

加法操作模块减法操作模块

基本算法:

1、输入输出

(1)功能:

将要进行运算的多项式输入输出。

(2)数据流入:

要输入的多项式的系数与指数。

(3)数据流出:

合并同类项后的多项式。

(4)程序流程图:

多项式输入流程图如图1所示。

图表1

(5)测试要点:

输入的多项式是否正确,若输入错误则重新输入

 

 

2、多项式的加法

(1)功能:

将两多项式相加。

(2)数据流入:

输入函数。

(3)数据流出:

多项式相加后的结果。

(4)程序流程图:

多项式的加法流程图如图2所示。

(5)测试要点:

两多项式是否为空,为空则提示重新输入,否则,进行运算。

 

图表2

 

 

3、多项式的减法

(1)功能:

将两多项式相减。

(2)数据流入:

调用输入函数。

(3)数据流出:

多项式相减后的结果。

(4)程序流程图:

多项式的减法流程图如图3所示。

(5)测试要点:

两多项式是否为空,为空则提示重新输入,否则,进行运算。

图表3

 

 

五.调试分析

采用单连表形式按照指数降序排列建立并输出多项式;在相加,相减的过程中如果指数相同就执行系数相加,相减,否则就把大的项直接写入。

完成两个多项式的相加、相减;将从新得到的单连表结果输出;该算法的时间复杂度为两个多项式的项式之和

 

六:

调试结果

1.测试的数据及结果

相乘:

相加:

相减:

 

程序代码:

#include

#include

typedefstructnode{

intxs;

intzs;

structnode*next;

}Dnode,*Dnodelist;/*定义结构体*/

DnodelistCreat_node(void)/*链表初始化*/

{

DnodelistD;

D=(Dnodelist)malloc(sizeof(Dnode));

if(D)

D->next=NULL;

returnD;

}

intInsert_node(DnodelistD,intxs,intzs)/*插入函数*/

{

Dnodelistp;

Dnodelistq;

Dnodelistr;

p=D;

while(p->next)

{

r=p;

p=p->next;

if(zs==p->zs)/*指数相等,系数直接相加,结束*/

{

p->xs=p->xs+xs;

return1;

}

elseif(zs>p->zs)/*指数大于当前数据的,将数据插入当前数据之前,结束*/

{

q=Creat_node();

q->xs=xs;

q->zs=zs;

r->next=q;

q->next=p;

return1;

}

}/*while(p->next)*/

q=Creat_node();/*要插入的数据指数最小,直接插入至链表最后*/

q->xs=xs;

q->zs=zs;

q->next=p->next;

p->next=q;

return1;

free(p);

free(q);

free(r);

}

DnodelistCreat_Dmeth(intlength)/*创建多项式*/

{

inti,m,n;

DnodelistD;

D=Creat_node();

for(i=0;i

{

scanf("%d,%d",&m,&n);

Insert_node(D,m,n);/*调用插入函数,将输入的系数指数插入链表*/

}

returnD;

}

DnodelistMulresult(DnodelistD1,DnodelistD2)/*多项式相乘*/

{

DnodelistD;

Dnodelistp,q;

intx,z;

D=Creat_node();

p=D1->next;

q=D2->next;

while(q)

{

while(p)

{

x=p->xs*q->xs;/*系数相乘,指数相加*/

z=p->zs+q->zs;

Insert_node(D,x,z);

p=p->next;

}

p=D1->next;

q=q->next;

}

returnD;

}

DnodelistAddresult(DnodelistD1,DnodelistD2)/*多项式相加*/

{

DnodelistD;

Dnodelistp,q;

intx,z;

D=Creat_node();

p=D1->next;

q=D2->next;

while(q)

{

x=q->xs;

z=q->zs;

Insert_node(D,x,z);

q=q->next;

}

while(p)

{

x=p->xs;

z=p->zs;

Insert_node(D,x,z);

p=p->next;/*直接插入数据,利用插入函数可完成该功能*/

}

returnD;

}

DnodelistSubresult(DnodelistD1,DnodelistD2)/*多项式相减*/

{

DnodelistD;

Dnodelistp,q;

intx,z;

D=Creat_node();

p=D1->next;

q=D2->next;

while(p&&q)

{

if((p->zs)<(q->zs))/*指数小(1的数据在2中不存在),直接插入*/

{

x=-(q->xs);/*由于是式1减式2,所以系数置负*/

z=q->zs;

Insert_node(D,x,z);

q=q->next;

}

elseif((p->zs)>(q->zs))/*指数大(2的数据在1中不存在),直接插入*/

{

x=p->xs;

z=p->zs;

Insert_node(D,x,z);

p=p->next;

}

else/*指数相同的先将系数相减,再插入*/

{

z=q->zs;

x=(p->xs)-(q->xs);

Insert_node(D,x,z);

p=p->next;

q=q->next;

}

}/*while(p&&q)*/

while(p)

{

x=p->xs;

z=p->zs;

Insert_node(D,x,z);

p=p->next;

}

while(q)

{

x=-(q->zs);

z=q->zs;

Insert_node(D,x,z);

q=q->next;

}/*将未遍历完的数据直接插入*/

returnD;

}

Dnodelistselect(DnodelistD1,DnodelistD2)/*选择函数*/

{

DnodelistD;

ints;

printf("请选择:

\n1:

相乘\n2:

相加\n3:

相减\n");

scanf("%d",&s);

switch(s)

{

case1:

D=Mulresult(D1,D2);/*调用相乘函数*/

printf("相乘结果(系数,指数):

\n");

break;

case2:

D=Addresult(D1,D2);/*调用相加函数*/

printf("相加结果(系数,指数):

\n");

break;

case3:

D=Subresult(D1,D2);/*调用相减函数*/

printf("相减结果(系数,指数):

\n");

break;

default:

printf("无此选项\n");

break;

}

returnD;

}

voidShow(DnodelistD)/*显示(输出)函数*/

{

Dnodelistr;

r=D->next;

while(r)

{

printf("(%d,%d)+",r->xs,r->zs);

r=r->next;

}

printf("\n");

}

voidmain()

{

DnodelistD1,D2,D;

intlength;

D1=Creat_node();

D2=Creat_node();/*D1为多项式1,D2为多项式2,初始化*/

printf("输入多项式1的组数:

\n");

scanf("%d",&length);

printf("输入多项式1系数,指数:

(%d组)\n",length);

D1=Creat_Dmeth(length);/*创建多项式1*/

printf("输入多项式2的组数:

\n");

scanf("%d",&length);

printf("输入多项式2系数,指数:

(%d组)\n",length);

D2=Creat_Dmeth(length);/*创建多项式2*/

D=select(D1,D2);/*选择运算方式*/

Show(D);/*输出显示*/

getchar();

}

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

当前位置:首页 > PPT模板 > 简洁抽象

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

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