数据结构作业多项式计算Word文档下载推荐.docx
- 文档编号:19668945
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:16
- 大小:1.16MB
数据结构作业多项式计算Word文档下载推荐.docx
《数据结构作业多项式计算Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构作业多项式计算Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
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//主程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 作业 多项式 计算