- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一元多项式加减乘除运算
中国计量学院实验报告
实验课程: 算法与数据结构 实验名称: 一元二项式 班 级: 学 号: 姓 名: 实验日期: 2013-5-7
实验题目:
创建2个一元多项式
实现2个多项式相加
实现2个多项式相减
实现2个多项式相乘
实现2个多项式相除
销毁一元多项式
算法说明
存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。
加法算法
测试结果
分析与探讨
实验数据正确,部分代码过于赘余,可以精简。
附录:源代码
#includestdio.h
#includemalloc.h
#includestdlib.h
typedef struct Polynomial
{
float coef;
int expn;
struct Polynomial *next;
}*Polyn,Polynomial;
//Insert
void Insert(Polyn p,Polyn h){
if(p-coef==0) free(p); //系数为0的话释放结点
else{
Polyn q1,q2;
q1=h;q2=h-next;
while(q2p-expnq2-expn){ //查找插入位置
q1=q2;
q2=q2-next;
}
if(q2p-expn==q2-expn){ //将指数相同相合并
q2-coef+=p-coef;
free(p);
if(!q2-coef){ //系数为0的话释放结点
q1-next=q2-next;
free(q2);
}
}
else{ //指数为新时将结点插入
p-next=q2;
q1-next=p;
}
}
}
//CreatePolyn
Polyn CreatePolyn(Polyn head,int m)
{
int i;
Polyn p;
p=head=(Polyn)malloc(sizeof( Polynomial));
head-next=NULL;
for(i=0;im;i++){
p=(Polyn)malloc(sizeof( Polynomial));//建立新结点以接收数据
printf(请输入第%d项的系数与指数:,i+1);
scanf(%f %d,p-coef,p-expn);
Insert(p,head);
}
return head;
}
//DestroyPolyn
void DestroyPolyn(Polyn head)
{
Polyn q1,q2;
q1=head;
while(q1!=NULL){
q2=q1-next;
free(q1);
q1=q2;
return;;
}
}
//PrintPolyn
void PrintPolyn(Polyn P){
Polyn q=P-next;
int flag=1;
if(!q)
{ //若多项式为空,输出0
putchar(0);
printf(\n);
return;
}
while (q){
if(q-coef0flag!=1) putchar(+); //系数大于0且不是第一项
if(q-coef!=1q-coef!=-1){ //系数非1或-1的普通情况
printf(%g,q-coef);
if(q-expn==1) putchar(X);
else if(q-expn) printf(X^%d,q-expn);
}
else{
if(q-coef==1){
if(!q-expn) putchar(1);
else if(q-expn==1) putchar(X);
else printf(X^%d,q-expn);
}
if(q-coef==-1){
if(!q-expn) printf(-1);
else if(q-expn==1) printf(-X);
else printf(-X^%d,q-expn);
}
}
q=q-next;
fla
文档评论(0)