|
#include<iostream.h>
#include<process.h>
struct NODE{
float coef;//系数
int exponent;//指数
NODE* next;
};
typedef NODE* head_ptr;
class POLYNIMIAL{
public:
POLYNIMIAL();
POLYNIMIAL(POLYNIMIAL&);
~POLYNIMIAL();
void insert(float ,int );
void display();
POLYNIMIAL operator =(const POLYNIMIAL&);
friend POLYNIMIAL operator + (const POLYNIMIAL&,const POLYNIMIAL&);
private:
NODE* seek_exponent(int n)
{
if (head->next==NULL){
return NULL;
}else{
NODE* ptr=head->next;
while(ptr!=NULL){
if(ptr->exponent==n)
break;
ptr=ptr->next;
}
return ptr;
}
}
head_ptr head;
};
POLYNIMIAL::POLYNIMIAL(){
head=new NODE;
head->next=NULL;
}
POLYNIMIAL::POLYNIMIAL(POLYNIMIAL& p){
head=p.head;
}
POLYNIMIAL::~POLYNIMIAL(){
NODE*ptr ;
while(head!=NULL){
ptr=head;
head=head->next;
delete ptr;
}
}
void POLYNIMIAL::insert(float c,int e)
{
if (seek_exponent(e)!=NULL){
NODE* temp=seek_exponent(e);
temp->coef+=c;
}else{
NODE* element;
element=new NODE;
element->coef=c;
element->exponent=e;
if (head->next==NULL)
{
head->next=element;
element->next=NULL;
}else{
NODE*temp=head->next;
while(temp->next!=NULL && temp->next->exponent<e )
temp=temp->next;
element->next=temp->next;
temp->next=element;
}
}
}
void POLYNIMIAL::display()
{
NODE*temp;
temp=head->next;
while(temp !=NULL)
{
cout<<temp->coef<<"x^"<<temp->exponent<<"+";
temp=temp->next ;
}
cout<<endl;
}
POLYNIMIAL operator + (const POLYNIMIAL& p1,const POLYNIMIAL& p2)//应该是这个函数的问题,请高手指教一下怎么重载这个运算符
{
POLYNIMIAL temp;
temp.head=p1.head;
NODE* pt2;
pt2=(p2.head)->next ;
while(pt2!=NULL){
float c=pt2->coef ;
int e=pt2->exponent ;
temp.insert (c,e);
pt2=pt2->next ;
}
return temp;
}
POLYNIMIAL POLYNIMIAL::operator = (const POLYNIMIAL& a){
head=a.head ;
return *this;
}
void main()
{
POLYNIMIAL p,p2;
p.insert(1,2);
p.insert (2,4);
p.insert (3,8);
p.insert (2,2);
p2.insert(1,2);
p2.insert (2,4);
p2.insert (3,8);
p2.display ();//这两个函数都运行成功。屏幕有显示
p.display ();
POLYNIMIAL p1;
p1=p+p2;//这个有问题,不知道为什么。
}
刚看了下链表,试一下用链表实现多项式的相加。结果编译链接都没错。就是运行时出错,程序终止。 |
|