您的位置:首页 > 其它

用链表实现一元多项式的加法运算

2016-02-26 19:13 447 查看
#include<iostream>
using namespace std;
struct Node
{
int coef;
int exp;
Node * next;
Node(){coef=0;exp=0;next=nullptr;}
};
class Polyn
{
private:

//int len;
public:
int len;
void create();
int insert(int c,int x);
void traverse();
Polyn& operator=(const Polyn& l);
Polyn operator+(Polyn& l);

Node * head;
};
void Polyn::create()
{
Node * p=new Node;
head=p;
len=0;
}
int Polyn::insert(int c,int x)
{
Node * p=new Node;
p->coef=c;
p->exp=x;
Node *tmp=head;
while(tmp->next!=nullptr)
{
if(x<tmp->next->e<span style="font-family: Arial, Helvetica, sans-serif;">xp) {p->next=tmp->next;tmp->next=p;len++;return -1;}</span>
else
if(x==tmp->next->exp) {tmp->next->coef+=c;return 0;}
else {tmp=tmp->next;}
}
tmp->next=p;
len++;
return 1;
}
Polyn& Polyn::operator=(const Polyn& l)
{
Node * tmp=l.head;
this->create();
while(tmp->next!=nullptr)
{
this->insert(tmp->next->coef,tmp->next->exp);
tmp=tmp->next;
}

return *this;
}
Polyn Polyn::operator+(Polyn& l)
{
Node * tmp=l.head;
Polyn m;
m.create();
m=*this;
while(tmp->next!=nullptr)
{
m.insert(tmp->next->coef,tmp->next->exp);
tmp=tmp->next;
}
return m;

}
void Polyn::traverse()
{
Node * tmp=head;
int count=len;
while(tmp->next!=nullptr)
{
if(tmp->next->exp==0) cout<<tmp->next->coef;
else cout<<tmp->next->coef<<"x^"<<tmp->next->exp;
tmp=tmp->next;
count--;
if(count!=0)

cout<<"+";
}
}
int main()
{
Polyn L;
L.create();
L.insert(1,0);
L.insert(2,1);
L.insert(3,1);
L.insert(2,5);

//Polyn L2=L;
Polyn L2;
L2=L;
L.traverse();cout<<endl;
L2.traverse();cout<<endl;
//cout<<&L<<endl;
//cout<<&L2<<endl;
L.insert(2,4);
L.traverse();cout<<endl;
L2.traverse();cout<<endl;
Polyn L3;
L3=L+L2;
L.traverse();cout<<endl;
L2.traverse();cout<<endl;
L3.traverse();cout<<endl;
}



我写的程序中,将链表的长度设为一个公有成员,有风险!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: