数据结构作业多项式计算Word文档下载推荐.docx

上传人:b****5 文档编号:19668945 上传时间:2023-01-08 格式:DOCX 页数:16 大小:1.16MB
下载 相关 举报
数据结构作业多项式计算Word文档下载推荐.docx_第1页
第1页 / 共16页
数据结构作业多项式计算Word文档下载推荐.docx_第2页
第2页 / 共16页
数据结构作业多项式计算Word文档下载推荐.docx_第3页
第3页 / 共16页
数据结构作业多项式计算Word文档下载推荐.docx_第4页
第4页 / 共16页
数据结构作业多项式计算Word文档下载推荐.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据结构作业多项式计算Word文档下载推荐.docx

《数据结构作业多项式计算Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构作业多项式计算Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。

数据结构作业多项式计算Word文档下载推荐.docx

ListNode*link;

//链表指针

//构造函数

ListNode()

{

link=NULL;

}

ListNode(item*it,ListNode*next=NULL)

data.coef=it->

coef;

data.exp=it->

exp;

link=next;

friendclassList;

3.本程序的基本算法设计:

a)多项式的相加或者相减运算:

两个多项式中所有指数相同的项对应系数相加或者相减,若和不为零,则构成结果多项式的一项,而所有指数不相同的那些项均被复制到结果多项式中。

b)多项式求导算法:

按照求导规则,对原链表中的每一个结点进行求导,将新生成的结点存储在结果多项式中。

c)多项式赋值算法:

对链表中的存储的多项式按照数学运算法则,进行数学运算,并返回相应的结果。

三、详细设计

1.List类的详细定义:

classList{

ListNode*first;

//指向表头的指针

intlength;

//链表长度

List(){first=NULL;

length=0;

};

ListNode*FindNode(inti);

//查找函数:

查找链表中第i个元素

item*GetNode(inti);

//取值函数:

返回链表中第i个元素的内容

intInsertNode(item*value,inti);

//插入函数:

在链表的第i个位置插入一个结点

voidCreatList(int&

);

//创建函数:

创建一个链表

voidSort();

//排序函数:

按照指数大小对元素进行排序

voidDisp();

//显示函数:

输出多项式

doubleCalcu(double&

//赋值函数:

对多项式赋值

voidClear();

//清空函数:

对链表置空

2.List类中主要成员函数的实现:

(1)查找函数:

返回链表中第i个元素的地址。

ListNode*List:

:

FindNode(inti)

if(i==0)returnfirst;

elseif(i<

0)returnNULL;

else

ListNode*p=first->

link;

intj=1;

while(p!

=NULL&

&

j<

i)

{

p=p->

j++;

}

returnp;

}

(2)取值函数:

返回链表中第i个元素的内容。

item*List:

GetNode(inti)

ListNode*p=FindNode(i);

if(p==NULL)

returnNULL;

elsereturn&

(p->

data);

(3)插入函数:

在链表的第i个位置插入一个结点。

intList:

InsertNode(item*value,inti)

ListNode*p=FindNode(i-1);

//查找第i-1个结点

ListNode*tmp=NULL;

if(first==NULL)//若链表为空,则构造新链表

first=newListNode(value,NULL);

length++;

return1;

if(p==NULL)//新结点作为头结点插入

tmp=first;

p=newListNode(value,NULL);

first=p;

p->

link=tmp;

else{//将新结点插入到第i个位置

tmp=FindNode(i);

ListNode*newnode=newListNode(value,NULL);

link=newnode;

newnode->

return1;

(4)创建函数:

创建一个链表。

voidList:

CreatList(int&

n)

itemt;

interr=0;

cout<

<

"

请输入多项式:

;

for(inti=0;

i<

n;

i++)

cin>

>

t.coef>

t.exp;

InsertNode(&

t,i);

(5)排序函数:

按照指数大小对元素进行排序。

Sort()

inti=0,j=0;

item*t;

item*t_buf;

ListNode*p,*q,*r,*m;

if(length>

=2)

for(i=0;

length;

for(j=0;

length-1;

j++)

{

t=GetNode(j);

t_buf=GetNode(j+1);

if(t->

exp<

t_buf->

exp)

{

if(j>

0)

{

p=FindNode(j-1);

q=FindNode(j);

r=p->

m=q->

link->

p->

link=q->

q->

link=r;

link=m;

}

else

r=first;

q=first->

first=first->

first->

link=q;

}

elseif(t->

exp==t_buf->

t->

coef+=t_buf->

0)

p=FindNode(j);

q=FindNode(j+1);

deleteq;

j--;

else

p=FindNode(j+1);

link=p->

deletep;

length--;

}

(6)赋值函数:

doubleList:

Calcu(double&

x)

doubleresult=0.0;

item*ta=GetNode(i);

result+=(double)(ta->

coef*pow(x,ta->

exp));

returnresult;

(7)清空函数:

Clear()

ListNode*q;

inti=0;

while(i++<

length)

q=first;

first=q->

deleteq;

first=NULL;

length=0;

3.多项式运算函数的实现:

(1)加法函数:

对排好序的多项式进行相加。

voidAdd(List&

polya,List&

polyb,List&

polyc)

intk=0;

item*ta=polya.GetNode(i);

item*tb=polyb.GetNode(j);

while(i<

polya.length&

polyb.length)

if(ta->

exp<

tb->

polyc.InsertNode(tb,k++);

if(j<

polyb.length)tb=polyb.GetNode(j);

elseif(ta->

exp>

i++;

polyc.InsertNode(ta,k++);

if(i<

polya.length)ta=polya.GetNode(i);

else

t.coef=ta->

coef+tb->

t.exp=ta->

if(t.coef)

polyc.InsertNode(&

t,k++);

ta=polya.GetNode(i);

tb=polyb.GetNode(j);

polya.length)

ta=polya.GetNode(i);

polyc.InsertNode(ta,k++);

i++;

while(j<

tb=polyb.GetNode(j);

polyc.InsertNode(tb,k++);

j++;

polyc.length=k;

(2)减法函数:

对多项式进行相减。

voidSub(List&

item*ta=polya.GetNode(i),*tb=polyb.GetNode(j),t;

t.coef=0-tb->

t.exp=tb->

polyc.InsertNode(&

coef-tb->

t.coef=-tb->

t.exp=tb->

polyc.InsertNode(&

(3)求导函数:

对多项式进行求导。

voidDiff(List&

item*ta,tc;

polya.length;

tc.coef=ta->

coef*ta->

tc.exp=ta->

exp-1;

tc,k++);

4.主函数的实现:

#include"

list.h"

#include<

iostream>

usingnamespacestd;

voidmain()

do{

cout<

endl;

1:

多项式相加"

2:

多项式相减"

3:

多项式求导"

4:

多项式赋值"

5:

退出"

endl<

请输入操作代码:

i;

switch(i)

case1:

ListAdd();

break;

case2:

ListSub();

case3:

ListDiff();

case4:

ListCalcu();

case5:

cout<

谢谢使用!

default:

输入错误!

}while(i>

=1&

=4);

四、用户手册

1.本程序的执行文件为:

PolynomialCalculator.exe

2.进入程序的用户界面:

3.选择“多项式相加”和“多项式相减”的命令后,即提示键入第一个多项式的项数以及每项的系数和指数,然后提示键入第二个多项式,最后进行多项式的相加相减操作并显示相应结果。

4.进入“多项式求导”的命令后,即提示键入待求导多项式,键入多项式后,程序会进行求导操作并显示相应结果。

5.进入“多项式赋值运算”的命令后,即提示键入待赋值多项式,键入多项式和

的值,程序会对相应的多项式进行赋值运算并显示相应的结果。

五、测试结果

1.加减法测试:

2.求导运算测试:

3.赋值运算测试:

六、附录

源程序文件清单:

List.h//主要数据结构以及List类的定义

List.cpp//类成员函数以及主要全局函数的实现

PolynomialCalculator.cpp//主程序

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

当前位置:首页 > 医药卫生 > 基础医学

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

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