一元多项式运算
2008-10-10 02:38
190 查看
#include<iostream>
#include<malloc.h>
#include<stdlib.h>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct polyn
{
float coef;
int expn;
struct polyn *next;
}Elem,*polynomial;
void CreatPolyn(polynomial &p,int n) //创建多项式
{
p=(polynomial)malloc(sizeof(Elem));
p->expn=-1;
p->next=NULL;
polynomial q=p,r;
for(int i=0;i<n;i++)
{
q=(polynomial)malloc(sizeof(Elem));
cin>>q->coef>>q->expn;
if(!i) {p->next=q;r=q;}
else {r->next=q;r=q;}
}
q->next=NULL;
}
void Sort(polynomial &p,int n) //排序
{
polynomial q,r,t;
int j;
bool change=true;
for(int i=n-1;i>0&&change;i--)
{
change=false;
for(r=p,q=p->next,j=0;q->next&&j<i;j++)
if(q->expn>q->next->expn) {
r->next=q->next;
t=q->next->next;
q->next->next=q;
q->next=t;
change=true;
r=r->next;}
else{r=q;q=q->next;}
}
}
void PrintPolyn(polynomial p) //输出
{
while(p=p->next)
cout<<p->coef<<" "<<p->expn<<endl;
cout<<endl;
}
void AddPolyn(polynomial &La,polynomial &Lb) //加法
{
polynomial qa=La->next,qb=Lb->next,qqa=La,t;
while(qa&&qb)
{ if(qb->expn>qa->expn) {qqa=qa;qa=qa->next;}
else if(qb->expn<qa->expn) {
qqa->next=qb;
t=qb;
qb=qb->next;
t->next=qa;}
else {
qa->coef+=qb->coef;
if(!qa->coef) {qqa->next=qa->next;
free(qa);
t=qb;
qb=qb->next;
free(t);
qa=qqa->next;}
else {qb=qb->next; qqa=qa;qa=qa->next;}
}
}
if(!qa&&qb) qqa->next=qb;
free(Lb);
}
void SubtractPolyn(polynomial &La,polynomial &Lb) //减法
{
polynomial qa=La->next,qb=Lb->next,qqa=La,t;
while(qa&&qb)
{ if(qb->expn>qa->expn) {qqa=qa;qa=qa->next;}
else if(qb->expn<qa->expn) {
qb->coef=-qb->coef;
qqa->next=qb;
t=qb;
qb=qb->next;
t->next=qa;}
else {
qa->coef-=qb->coef;
if(!qa->coef) {qqa->next=qa->next;
free(qa);
t=qb;
qb=qb->next;
free(t);
qa=qqa->next;}
else {qb=qb->next; qqa=qa;qa=qa->next;}
}
}
if(!qa&&qb) {
qqa->next=qb;
while(qb)
{
qb->coef=-qb->coef;
qb=qb->next; }
}
free(Lb);}
void CopyPolyn(polynomial &La,polynomial &Lb) //复制
{
polynomial p,q,pp=La->next;
Lb=(polynomial)malloc(sizeof(Elem));
Lb->expn=-1;
for(;pp;pp=pp->next)
{
p=(polynomial)malloc(sizeof(Elem));
p->coef=pp->coef;
p->expn=pp->expn;
if(pp==La->next) {Lb->next=p;q=p;}
else {q->next=p;q=p;}
}
p->next=NULL; }
void InsertPolyn(polynomial &La,polynomial &e) //插入
{
polynomial pa=La,t;
while(pa->next&&pa->next->expn<e->expn)
pa=pa->next;
if(!pa->next) {pa->next=e;e->next=NULL;}
else if(pa->next->expn>e->expn) {
e->next=pa->next;
pa->next=e;
}
else if(pa->next->expn==e->expn) {
pa->next->coef+=e->coef;
if(!pa->next->coef)
{
t=pa->next;
pa->next=pa->next->next;
// free(t);
}
//free(e);
}
}
void MultiplyPolyn(polynomial La,polynomial Lb,polynomial &Lc) //乘法
{
polynomial qa,qb=Lb,qq;
Lc=(polynomial)malloc(sizeof(Elem));
Lc->expn=-1;
Lc->next=NULL;
while(qb=qb->next)
{
for(qa=La->next;qa;qa=qa->next)
{
qq=(polynomial)malloc(sizeof(Elem));
qq->coef=qa->coef*qb->coef;
qq->expn=qa->expn+qb->expn;
InsertPolyn(Lc,qq);}
}
}
int main()
{
int np,nq;
polynomial p,q,m,r,y;
cin>>np;
CreatPolyn(p,np);
Sort(p,np);
PrintPolyn(p);
cin>>nq;
CreatPolyn(q,nq);
Sort(q,nq);
PrintPolyn(q);
CopyPolyn(q,r);
PrintPolyn(r);
CopyPolyn(q,y);
PrintPolyn(y);
AddPolyn(p,q);
PrintPolyn(p);
SubtractPolyn(p,r);
PrintPolyn(p);
MultiplyPolyn(p,y,m);
PrintPolyn(m);
return 0;
}
3
2 1
3 0
1 3
3 0
2 1
1 3
2
1 4
-2 1
-2 1
1 4
-2 1
1 4
-2 1
1 4
3 0
1 3
1 4
3 0
2 1
1 3
-6 1
-4 2
1 4
2 5
1 7
请按任意键继续. . .
#include<malloc.h>
#include<stdlib.h>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct polyn
{
float coef;
int expn;
struct polyn *next;
}Elem,*polynomial;
void CreatPolyn(polynomial &p,int n) //创建多项式
{
p=(polynomial)malloc(sizeof(Elem));
p->expn=-1;
p->next=NULL;
polynomial q=p,r;
for(int i=0;i<n;i++)
{
q=(polynomial)malloc(sizeof(Elem));
cin>>q->coef>>q->expn;
if(!i) {p->next=q;r=q;}
else {r->next=q;r=q;}
}
q->next=NULL;
}
void Sort(polynomial &p,int n) //排序
{
polynomial q,r,t;
int j;
bool change=true;
for(int i=n-1;i>0&&change;i--)
{
change=false;
for(r=p,q=p->next,j=0;q->next&&j<i;j++)
if(q->expn>q->next->expn) {
r->next=q->next;
t=q->next->next;
q->next->next=q;
q->next=t;
change=true;
r=r->next;}
else{r=q;q=q->next;}
}
}
void PrintPolyn(polynomial p) //输出
{
while(p=p->next)
cout<<p->coef<<" "<<p->expn<<endl;
cout<<endl;
}
void AddPolyn(polynomial &La,polynomial &Lb) //加法
{
polynomial qa=La->next,qb=Lb->next,qqa=La,t;
while(qa&&qb)
{ if(qb->expn>qa->expn) {qqa=qa;qa=qa->next;}
else if(qb->expn<qa->expn) {
qqa->next=qb;
t=qb;
qb=qb->next;
t->next=qa;}
else {
qa->coef+=qb->coef;
if(!qa->coef) {qqa->next=qa->next;
free(qa);
t=qb;
qb=qb->next;
free(t);
qa=qqa->next;}
else {qb=qb->next; qqa=qa;qa=qa->next;}
}
}
if(!qa&&qb) qqa->next=qb;
free(Lb);
}
void SubtractPolyn(polynomial &La,polynomial &Lb) //减法
{
polynomial qa=La->next,qb=Lb->next,qqa=La,t;
while(qa&&qb)
{ if(qb->expn>qa->expn) {qqa=qa;qa=qa->next;}
else if(qb->expn<qa->expn) {
qb->coef=-qb->coef;
qqa->next=qb;
t=qb;
qb=qb->next;
t->next=qa;}
else {
qa->coef-=qb->coef;
if(!qa->coef) {qqa->next=qa->next;
free(qa);
t=qb;
qb=qb->next;
free(t);
qa=qqa->next;}
else {qb=qb->next; qqa=qa;qa=qa->next;}
}
}
if(!qa&&qb) {
qqa->next=qb;
while(qb)
{
qb->coef=-qb->coef;
qb=qb->next; }
}
free(Lb);}
void CopyPolyn(polynomial &La,polynomial &Lb) //复制
{
polynomial p,q,pp=La->next;
Lb=(polynomial)malloc(sizeof(Elem));
Lb->expn=-1;
for(;pp;pp=pp->next)
{
p=(polynomial)malloc(sizeof(Elem));
p->coef=pp->coef;
p->expn=pp->expn;
if(pp==La->next) {Lb->next=p;q=p;}
else {q->next=p;q=p;}
}
p->next=NULL; }
void InsertPolyn(polynomial &La,polynomial &e) //插入
{
polynomial pa=La,t;
while(pa->next&&pa->next->expn<e->expn)
pa=pa->next;
if(!pa->next) {pa->next=e;e->next=NULL;}
else if(pa->next->expn>e->expn) {
e->next=pa->next;
pa->next=e;
}
else if(pa->next->expn==e->expn) {
pa->next->coef+=e->coef;
if(!pa->next->coef)
{
t=pa->next;
pa->next=pa->next->next;
// free(t);
}
//free(e);
}
}
void MultiplyPolyn(polynomial La,polynomial Lb,polynomial &Lc) //乘法
{
polynomial qa,qb=Lb,qq;
Lc=(polynomial)malloc(sizeof(Elem));
Lc->expn=-1;
Lc->next=NULL;
while(qb=qb->next)
{
for(qa=La->next;qa;qa=qa->next)
{
qq=(polynomial)malloc(sizeof(Elem));
qq->coef=qa->coef*qb->coef;
qq->expn=qa->expn+qb->expn;
InsertPolyn(Lc,qq);}
}
}
int main()
{
int np,nq;
polynomial p,q,m,r,y;
cin>>np;
CreatPolyn(p,np);
Sort(p,np);
PrintPolyn(p);
cin>>nq;
CreatPolyn(q,nq);
Sort(q,nq);
PrintPolyn(q);
CopyPolyn(q,r);
PrintPolyn(r);
CopyPolyn(q,y);
PrintPolyn(y);
AddPolyn(p,q);
PrintPolyn(p);
SubtractPolyn(p,r);
PrintPolyn(p);
MultiplyPolyn(p,y,m);
PrintPolyn(m);
return 0;
}
3
2 1
3 0
1 3
3 0
2 1
1 3
2
1 4
-2 1
-2 1
1 4
-2 1
1 4
-2 1
1 4
3 0
1 3
1 4
3 0
2 1
1 3
-6 1
-4 2
1 4
2 5
1 7
请按任意键继续. . .
相关文章推荐
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- Programming Ability Test学习 3-04. 一元多项式的乘法与加法运算(20)
- 实验项目 3-4:一元多项式的乘法与加法运算
- 一元多项式的表示及加减乘法运算
- 02-线性结构2 一元多项式的乘法与加法运算(20 分) 用结构数组的方法
- pta 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算
- 线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算
- 链表及其应用3————一元多项式的运算
- c++实现链式存储结构实现一元多项式的加法运算
- 02-线性结构2 一元多项式的乘法与加法运算
- 一元多项式的运算
- 线性链表实现一元多项式的加法运算
- 一元多项式的表示及加减乘除运算
- 数据结构之一元多项式运算操作5-(加,减,乘,化简)
- 数据结构 PAT 02-线性结构1 一元多项式的乘法与加法运算