顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现 ,
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/23 15:13:45
顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现 ,
顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现
二、\x05主要内容
设有一元多项式Am(x)和Bn(x).
Am(x)=A0+A1x1+A2x2+A3x3+… +Amxm
Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn
请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x).实现多项式的加、减、乘.
三、具体要求及应提交的材料
首先判定多项式是否稀疏
分别采用顺序和动态存储结构实现;
结果M(x)中无重复阶项和无零系数项;
要求输出结果的升幂和降幂两种排列情况
用C/C++语言编程实现上述内容,对每个问题写出一个算法实现
说错了,只能c++哈,尽量详细哈,多给注释哈!
顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现
二、\x05主要内容
设有一元多项式Am(x)和Bn(x).
Am(x)=A0+A1x1+A2x2+A3x3+… +Amxm
Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn
请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x).实现多项式的加、减、乘.
三、具体要求及应提交的材料
首先判定多项式是否稀疏
分别采用顺序和动态存储结构实现;
结果M(x)中无重复阶项和无零系数项;
要求输出结果的升幂和降幂两种排列情况
用C/C++语言编程实现上述内容,对每个问题写出一个算法实现
说错了,只能c++哈,尽量详细哈,多给注释哈!
#include
using namespace std;
struct term
{
\x09float xishu; //系数
\x09int zhishu; //指数
};
struct LNode
{
\x09term data; //term多项式值
\x09struct LNode *next;
};
typedef LNode* polynomail;
/*合并同类项*/
polynomail hebing(polynomail Head)
{
\x09polynomail r,q,p,Q;
\x09for(q=Head->next;q!=NULL;q=q->next)//合并同类项
\x09\x09\x09for(p=q->next,r=q;p!=NULL;)
\x09\x09\x09\x09if(q->data.zhishu==p->data.zhishu)
\x09\x09\x09\x09{
\x09\x09\x09\x09\x09q->data.xishu=q->data.xishu+p->data.xishu;
\x09\x09\x09\x09\x09r->next=p->next;
\x09\x09\x09\x09\x09Q=p;p=p->next;
\x09\x09\x09\x09\x09delete Q;
\x09\x09\x09\x09}
\x09\x09\x09\x09else
\x09\x09\x09\x09{
\x09\x09\x09\x09\x09r=r->next;
\x09\x09\x09\x09\x09p=p->next;
\x09\x09\x09\x09}
\x09return Head;
}
/*又小到大排列*/
void arrange1(polynomail pa)
{
\x09polynomail h=pa,p,q,r;
\x09for(p=pa;p->next!=NULL;p=p->next);r=p;
\x09while(h->next!=r)//大的沉底
\x09{
\x09\x09for(p=h;p->next!=r&&p!=r;p=p->next)
\x09\x09\x09if(p->next->data.zhishu>p->next->next->data.zhishu)
\x09\x09\x09{
\x09\x09\x09\x09q=p->next->next;
\x09\x09\x09\x09p->next->next=q->next;
\x09\x09\x09\x09q->next=p->next;
\x09\x09\x09\x09p->next=q;
\x09\x09\x09}
\x09\x09\x09r=p;//r指向参与比较的最后一个,不断向前移动
\x09}
}
/*由大到小排序*/
void arrange2(polynomail pa)
{
\x09polynomail h=pa,p,q,r;
\x09for(p=pa;p->next!=NULL;p=p->next); r=p;
\x09while(h->next!=r)//小的沉底
\x09{
\x09\x09for(p=h;p->next!=r&&p!=r;p=p->next)
\x09\x09\x09if(p->next->data.zhishunext->next->data.zhishu)
\x09\x09\x09{
\x09\x09\x09\x09q=p->next->next;
\x09\x09\x09\x09p->next->next=q->next;
\x09\x09\x09\x09q->next=p->next;
\x09\x09\x09\x09p->next=q;
\x09\x09\x09}
\x09\x09\x09r=p;//r指向参与比较的最后一个,不断向前移动
\x09}
}
bool judge(polynomail Head)
{
\x09arrange2(Head);
\x09polynomail p;
\x09p=Head->next;
\x09bool xi=false;
\x09while(p!=NULL&&p->next!=NULL&&!xi)
\x09{
\x09\x09if(p->data.zhishu-p->next->data.zhishu>1)
\x09\x09\x09xi=true;
\x09\x09p=p->next;
\x09}
\x09return xi;
}
/*打印多项式,求项数*/
void printpolyn(polynomail P)
{
\x09int i;
\x09polynomail q;
\x09if(P==NULL)
\x09\x09coutdata.zhishu;
\x09\x09r->next=s; r=s;
\x09\x09p=p->next;
\x09}
\x09while(q)
\x09{
\x09\x09s=new LNode;
\x09\x09s->data.xishu=q->data.xishu;
\x09\x09s->data.zhishu=q->data.zhishu;
\x09\x09r->next=s; r=s;
\x09\x09q=q->next;
\x09}
\x09r->next=NULL;
\x09if(newHead->next!=NULL&&newHead->next->next!=NULL)//合并同类项
\x09\x09newHead=hebing(newHead);
\x09coutnext;
\x09newHead=new LNode;
\x09r=newHead;
\x09while(p)
\x09{
\x09\x09s=new LNode;
\x09\x09s->data.xishu=p->data.xishu;
\x09\x09s->data.zhishu=p->data.zhishu;
\x09\x09r->next=s; r=s;
\x09\x09p=p->next;
\x09}
\x09while(q)
\x09{
\x09\x09s=new LNode;
\x09\x09s->data.xishu=-q->data.xishu;
\x09\x09s->data.zhishu=q->data.zhishu;
\x09\x09r->next=s; r=s;
q=q->next;
\x09}
\x09r->next=NULL;
if(newHead->next!=NULL&&newHead->next->next!=NULL)//合并同类项
\x09\x09newHead=hebing(newHead);
\x09coutnext)
\x09\x09for(q=pb->next;q!=NULL;q=q->next)
\x09\x09{
\x09\x09\x09s=new LNode;
\x09\x09\x09s->data.xishu=p->data.xishu*q->data.xishu;
\x09\x09\x09s->data.zhishu=p->data.zhishu+q->data.zhishu;
\x09\x09\x09r->next=s;
\x09\x09\x09r=s;
\x09\x09}
\x09\x09r->next=NULL;
\x09\x09coutnext->next!=NULL)//合并同类项
\x09\x09\x09newHead=hebing(newHead);
\x09\x09return newHead;
}
/*5、销毁已建立的两个多项式*/
void delpolyn(polynomail pa,polynomail pb)
{
\x09polynomail p,q;
\x09p=pa;
\x09while(p!=NULL)
\x09{
\x09\x09q=p;
\x09\x09p=p->next;
\x09\x09free(q);
\x09}
\x09p=pb;
\x09while(p!=NULL)
\x09{
\x09\x09q=p;
\x09\x09p=p->next;
\x09\x09free(q);
\x09}
\x09cout
using namespace std;
struct term
{
\x09float xishu; //系数
\x09int zhishu; //指数
};
struct LNode
{
\x09term data; //term多项式值
\x09struct LNode *next;
};
typedef LNode* polynomail;
/*合并同类项*/
polynomail hebing(polynomail Head)
{
\x09polynomail r,q,p,Q;
\x09for(q=Head->next;q!=NULL;q=q->next)//合并同类项
\x09\x09\x09for(p=q->next,r=q;p!=NULL;)
\x09\x09\x09\x09if(q->data.zhishu==p->data.zhishu)
\x09\x09\x09\x09{
\x09\x09\x09\x09\x09q->data.xishu=q->data.xishu+p->data.xishu;
\x09\x09\x09\x09\x09r->next=p->next;
\x09\x09\x09\x09\x09Q=p;p=p->next;
\x09\x09\x09\x09\x09delete Q;
\x09\x09\x09\x09}
\x09\x09\x09\x09else
\x09\x09\x09\x09{
\x09\x09\x09\x09\x09r=r->next;
\x09\x09\x09\x09\x09p=p->next;
\x09\x09\x09\x09}
\x09return Head;
}
/*又小到大排列*/
void arrange1(polynomail pa)
{
\x09polynomail h=pa,p,q,r;
\x09for(p=pa;p->next!=NULL;p=p->next);r=p;
\x09while(h->next!=r)//大的沉底
\x09{
\x09\x09for(p=h;p->next!=r&&p!=r;p=p->next)
\x09\x09\x09if(p->next->data.zhishu>p->next->next->data.zhishu)
\x09\x09\x09{
\x09\x09\x09\x09q=p->next->next;
\x09\x09\x09\x09p->next->next=q->next;
\x09\x09\x09\x09q->next=p->next;
\x09\x09\x09\x09p->next=q;
\x09\x09\x09}
\x09\x09\x09r=p;//r指向参与比较的最后一个,不断向前移动
\x09}
}
/*由大到小排序*/
void arrange2(polynomail pa)
{
\x09polynomail h=pa,p,q,r;
\x09for(p=pa;p->next!=NULL;p=p->next); r=p;
\x09while(h->next!=r)//小的沉底
\x09{
\x09\x09for(p=h;p->next!=r&&p!=r;p=p->next)
\x09\x09\x09if(p->next->data.zhishunext->next->data.zhishu)
\x09\x09\x09{
\x09\x09\x09\x09q=p->next->next;
\x09\x09\x09\x09p->next->next=q->next;
\x09\x09\x09\x09q->next=p->next;
\x09\x09\x09\x09p->next=q;
\x09\x09\x09}
\x09\x09\x09r=p;//r指向参与比较的最后一个,不断向前移动
\x09}
}
bool judge(polynomail Head)
{
\x09arrange2(Head);
\x09polynomail p;
\x09p=Head->next;
\x09bool xi=false;
\x09while(p!=NULL&&p->next!=NULL&&!xi)
\x09{
\x09\x09if(p->data.zhishu-p->next->data.zhishu>1)
\x09\x09\x09xi=true;
\x09\x09p=p->next;
\x09}
\x09return xi;
}
/*打印多项式,求项数*/
void printpolyn(polynomail P)
{
\x09int i;
\x09polynomail q;
\x09if(P==NULL)
\x09\x09coutdata.zhishu;
\x09\x09r->next=s; r=s;
\x09\x09p=p->next;
\x09}
\x09while(q)
\x09{
\x09\x09s=new LNode;
\x09\x09s->data.xishu=q->data.xishu;
\x09\x09s->data.zhishu=q->data.zhishu;
\x09\x09r->next=s; r=s;
\x09\x09q=q->next;
\x09}
\x09r->next=NULL;
\x09if(newHead->next!=NULL&&newHead->next->next!=NULL)//合并同类项
\x09\x09newHead=hebing(newHead);
\x09coutnext;
\x09newHead=new LNode;
\x09r=newHead;
\x09while(p)
\x09{
\x09\x09s=new LNode;
\x09\x09s->data.xishu=p->data.xishu;
\x09\x09s->data.zhishu=p->data.zhishu;
\x09\x09r->next=s; r=s;
\x09\x09p=p->next;
\x09}
\x09while(q)
\x09{
\x09\x09s=new LNode;
\x09\x09s->data.xishu=-q->data.xishu;
\x09\x09s->data.zhishu=q->data.zhishu;
\x09\x09r->next=s; r=s;
q=q->next;
\x09}
\x09r->next=NULL;
if(newHead->next!=NULL&&newHead->next->next!=NULL)//合并同类项
\x09\x09newHead=hebing(newHead);
\x09coutnext)
\x09\x09for(q=pb->next;q!=NULL;q=q->next)
\x09\x09{
\x09\x09\x09s=new LNode;
\x09\x09\x09s->data.xishu=p->data.xishu*q->data.xishu;
\x09\x09\x09s->data.zhishu=p->data.zhishu+q->data.zhishu;
\x09\x09\x09r->next=s;
\x09\x09\x09r=s;
\x09\x09}
\x09\x09r->next=NULL;
\x09\x09coutnext->next!=NULL)//合并同类项
\x09\x09\x09newHead=hebing(newHead);
\x09\x09return newHead;
}
/*5、销毁已建立的两个多项式*/
void delpolyn(polynomail pa,polynomail pb)
{
\x09polynomail p,q;
\x09p=pa;
\x09while(p!=NULL)
\x09{
\x09\x09q=p;
\x09\x09p=p->next;
\x09\x09free(q);
\x09}
\x09p=pb;
\x09while(p!=NULL)
\x09{
\x09\x09q=p;
\x09\x09p=p->next;
\x09\x09free(q);
\x09}
\x09cout
关于C语言的题目:用结构体定义一个复数,并实现复数的加法、减法和乘法.
C++定义描述复数的结构体类型变量,实现复数的输入输出.设计三个函数实现复数的加法,减法和乘法运算
C++定义描述复数的结构体类型变量,是想复数的输入输出.设计三个函数实现复数的加法,减法和乘法运算.
加法减法乘法除法的来历
加法、减法、乘法、除法的定义
加法 减法 乘法 除法的意义是什么
多项式只是指单项式的加法吗?减法,乘法,除法可以吗?
什么叫加法,减法,乘法,除法?加法,减法,乘法,除法的概念
设计实现抽象数据类型“有理数”.基本操作包括有理数的加法,减法,乘法,除法,以及求有理数的分子,分
有理数的加法,减法,乘法,除法的法则是什么?
有理数的加法,减法,乘法,除法的法则?
英语的加法、减法、乘法、除法怎样表示的?