一元多项式的加减法(C++版)
2009-03-28 20:06
316 查看
#include<iostream>
#include<stdlib.h>
#include<ctype.h>
using namespace std;
typedef struct Lnode
{ float coef; //系数
int exp; //指数
struct Lnode *next;
}LNode,*LinkList;
void CreatPolyn(LinkList &L,int m)
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; //建立一个带头结点的单链表
LinkList p,q;
cout<<"请依次输入各项的系数和指数"<<endl;
for(int i=1;i<=m;i++) //插入到表尾
{
p=(LinkList)malloc(sizeof(LNode));
cin>>p->coef>>p->exp;
if(L->next==NULL) L->next=p;
else q->next=p;
p->next=NULL;
q=p;
}
}
void output(LinkList h) //输出一元多项式的函数
{ if(h->next==NULL)
cout<<0;
else
{ h=h->next;
cout<<h->coef<<"*"<<"x^"<<h->exp;
while(h->next!=NULL)
{ h=h->next;
if(h->coef>0)
cout<<'+'<<h->coef<<"*"<<"x^"<<h->exp;
else
cout<<h->coef<<"*"<<"x^"<<h->exp;
}
}
}
LinkList add(LinkList a,LinkList b)//加法函数
{ LinkList p,q,r,t;
int s;
p=a->next;
q=b->next;
r=a;
while(p!=NULL&&q!=NULL)
{ if(p->exp < q->exp)
{ r->next=p;
r=r->next;
p=p-> next;
}
else if(p->exp > q->exp)
{ r->next=q;
r=r->next;
q=q-> next;
}
else
{ s=p->coef+q->coef;
if(s!=0)
{ p->coef=s;
r->next=p;
r=r->next;
p=p->next;
t=q;
q=q->next;
free(t);
}
else
{ t=p;
p=p->next;
free(t);
t=q;
q=q->next;
free(t);
}
}
}
if(p!=NULL)
r->next=p;
else r->next=q;
return(a);
}
LinkList min(LinkList a, LinkList b)//减法函数
{ LinkList p,q,r,t;
int s;
p=a->next;
q=b->next;
r=a;
while(p!=NULL&&q!=NULL)
{ if(p->exp < q->exp)
{ r->next=p;
r=r->next;
p=p->next;
}
else if(p->exp > q->exp)
{ q->coef=-q->coef;
r->next=q;
r=r-> next;
q=q-> next;
}
else
{ s=p->coef-q->coef;
if(s!=0)
{ p->coef=s;
r->next=p;
r=r->next;
p=p->next;
t=q;
q=q->next;
free(t);
}
else
{ t=p;
p=p->next;
free(t);
t=q;
q=q->next;
free(t);
if(p==NULL&&q==NULL)
r-> next=NULL;
}
}
}
if(p!=NULL)
r-> next=p;
else
{ while(q!=NULL)
{ q->coef=-q-> coef;
r->next=q;
r=r->next;
q=q->next;
}
}
return(a);
}
int main() //主函数
{ LinkList pa,pb,pc;
int i,j,k;
cout<<"******一元多项式加减法******"<<endl;
cout<<"建立一元多项式A(x):"<<endl<<"请输入项数:"<<endl;
cin>>i;
CreatPolyn(pa,i);
cout<<"A(x)=";
output(pa);
cout<<endl;
cout<<"建立一元多项式B(x):"<<endl<<"请输入项数:"<<endl;
cin>>j;
CreatPolyn(pb,j);
cout<<"B(x)=";
output(pb);
cout<<endl;
cout<<"******要执行加法还是减法?(加法1,减法2,取消0)*****"<<endl;
cin>> k;
if(k==1)
{ pc=add(pa,pb);
cout<<"C(x)=A(x)+B(X)=";
output(pc);
cout<<endl;
}
if(k==2)
{ pc=min(pa,pb);
cout<<"C(x)=A(x)-B(x)=";
output(pc);
cout<<endl;
}
else exit(0);
return 0;
}
#include<stdlib.h>
#include<ctype.h>
using namespace std;
typedef struct Lnode
{ float coef; //系数
int exp; //指数
struct Lnode *next;
}LNode,*LinkList;
void CreatPolyn(LinkList &L,int m)
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; //建立一个带头结点的单链表
LinkList p,q;
cout<<"请依次输入各项的系数和指数"<<endl;
for(int i=1;i<=m;i++) //插入到表尾
{
p=(LinkList)malloc(sizeof(LNode));
cin>>p->coef>>p->exp;
if(L->next==NULL) L->next=p;
else q->next=p;
p->next=NULL;
q=p;
}
}
void output(LinkList h) //输出一元多项式的函数
{ if(h->next==NULL)
cout<<0;
else
{ h=h->next;
cout<<h->coef<<"*"<<"x^"<<h->exp;
while(h->next!=NULL)
{ h=h->next;
if(h->coef>0)
cout<<'+'<<h->coef<<"*"<<"x^"<<h->exp;
else
cout<<h->coef<<"*"<<"x^"<<h->exp;
}
}
}
LinkList add(LinkList a,LinkList b)//加法函数
{ LinkList p,q,r,t;
int s;
p=a->next;
q=b->next;
r=a;
while(p!=NULL&&q!=NULL)
{ if(p->exp < q->exp)
{ r->next=p;
r=r->next;
p=p-> next;
}
else if(p->exp > q->exp)
{ r->next=q;
r=r->next;
q=q-> next;
}
else
{ s=p->coef+q->coef;
if(s!=0)
{ p->coef=s;
r->next=p;
r=r->next;
p=p->next;
t=q;
q=q->next;
free(t);
}
else
{ t=p;
p=p->next;
free(t);
t=q;
q=q->next;
free(t);
}
}
}
if(p!=NULL)
r->next=p;
else r->next=q;
return(a);
}
LinkList min(LinkList a, LinkList b)//减法函数
{ LinkList p,q,r,t;
int s;
p=a->next;
q=b->next;
r=a;
while(p!=NULL&&q!=NULL)
{ if(p->exp < q->exp)
{ r->next=p;
r=r->next;
p=p->next;
}
else if(p->exp > q->exp)
{ q->coef=-q->coef;
r->next=q;
r=r-> next;
q=q-> next;
}
else
{ s=p->coef-q->coef;
if(s!=0)
{ p->coef=s;
r->next=p;
r=r->next;
p=p->next;
t=q;
q=q->next;
free(t);
}
else
{ t=p;
p=p->next;
free(t);
t=q;
q=q->next;
free(t);
if(p==NULL&&q==NULL)
r-> next=NULL;
}
}
}
if(p!=NULL)
r-> next=p;
else
{ while(q!=NULL)
{ q->coef=-q-> coef;
r->next=q;
r=r->next;
q=q->next;
}
}
return(a);
}
int main() //主函数
{ LinkList pa,pb,pc;
int i,j,k;
cout<<"******一元多项式加减法******"<<endl;
cout<<"建立一元多项式A(x):"<<endl<<"请输入项数:"<<endl;
cin>>i;
CreatPolyn(pa,i);
cout<<"A(x)=";
output(pa);
cout<<endl;
cout<<"建立一元多项式B(x):"<<endl<<"请输入项数:"<<endl;
cin>>j;
CreatPolyn(pb,j);
cout<<"B(x)=";
output(pb);
cout<<endl;
cout<<"******要执行加法还是减法?(加法1,减法2,取消0)*****"<<endl;
cin>> k;
if(k==1)
{ pc=add(pa,pb);
cout<<"C(x)=A(x)+B(X)=";
output(pc);
cout<<endl;
}
if(k==2)
{ pc=min(pa,pb);
cout<<"C(x)=A(x)-B(x)=";
output(pc);
cout<<endl;
}
else exit(0);
return 0;
}
相关文章推荐
- 一元多项式的加减法 C++实现
- C++ 队列 实现 多项式 加减法
- 数据结构(14)线性表之C++实现一元多项式相乘
- 数据结构:C++链表类及一元多项式的实现时遇到的困难
- 用单链表实现一元多项式相加 C++代码
- 一元多项式相加与相乘(C++)
- PAT 一元多项式的乘法与加法运算(链表 c++版)
- c++实现链式存储结构实现一元多项式的加法运算
- 一元稀疏多项式(加减法)
- PAT 1010 乙等 (一元多项式求导)c++
- C++版数据结构课程设计(一元多项式)
- C++ 02-线性结构2 一元多项式的乘法与加法运算
- [C/C++]OJ练习题:一元稀疏多项式计算器
- 1010. 一元多项式求导 (25)(C++)
- 一元多项式加减法运算[C语言]
- 【c++版数据结构】之用带头节点的单链表实现一元多项式(C语言版)
- 一元多项式相加的算法和C++实现
- 一元多项式的加法C++
- 【数据结构】C++链表实现一元多项式的加法
- 数据结构(13)线性表之C++实现一元多项式相减