初学数据结构,写了个多项式相加,太久没打代码了,要努力学习!
#include<bits/stdc++.h>
using namespace std;
struct LinkNode //多项式结点
{
int expn; //指数
int coef; //系数
LinkNode *next; //结点指针
LinkNode(float c,int e,LinkNode *p=NULL) //结点构造函数
{
expn = e;
coef = c;
next = p;
}
};
class Poly //多项式类
{
public:
LinkNode *L; //首结点地址
Poly()
{
L=new LinkNode(0,-1); //构造函数设置头结点默认值
}
void Input(Poly &l,int m); //输入多项式
void Output(Poly &l);//输出多项式
void Addpolyn(Poly &a,Poly &b);//多项式相加
};
void Input(Poly &l,int m)
{
LinkNode *p=l.L;
while(m)
{
int num1,num2;
cin>>num1>>num2;
p->next =new LinkNode(num1,num2);
p = p->next;
m--;
}
}
void Output(Poly &l)
{
LinkNode *p = l.L;
p = p->next;
while(p)
{
cout<<p->coef<<"x^"<<p->expn;
if(p->next)//判断是否到尾结点
cout<<"+";
p = p->next;
}
cout<<endl;
}
void Addpolyn(Poly &a,Poly &b)
{
LinkNode *m = a.L->next;LinkNode *n = b.L->next;
Poly pre;//创建和多项式
LinkNode *k = pre.L;
while(m&&n)
{
if(m->expn > n->expn)//衔接指数小的结点
{
k->next = n;
k = k->next;
n = n->next;
}
else if(m->expn < n->expn)
{
k->next = m;
k = k->next;
m = m->next;
}
else//指数相等的结点则系数相加再插入和多项式
{
n->coef += m->coef;
k->next = n;
k = k->next;
n = n->next;
m = m->next;
}
}
k->next = n? n:m;//补全尾部
Output(pre);//输出和多项式
}
int main()
{
Poly a;//建立多项式a
int m1;
cout<<"输入第一个多项式的项数"<<endl;
cin>>m1;
cout<<"依次输入第一个多项式每项的系数和指数"<<endl;
Input(a,m1);//输入多项式a
cout<<"第一个多项式为;"<<endl;
Output(a);//输出多项式a
Poly b;//建立多项式b
int m2;
cout<<"输入第二个多项式的项数"<<endl;
cin>>m2;
cout<<"依次输入第二个多项式每项的系数和指数"<<endl;
Input(b,m2);//输入多项式b
cout<<"第二个多项式为;"<<endl;
Output(b);//输出多项式b
cout<<"两多项式的和为:" <<endl;
Addpolyn(a,b);//两个多项式相加并输出
}