
#include<iostream.h>
#include<stdlib.h>
#include<math.h>
struct term {
double coef;
int exp;
};
typedef term elemtype;
struct LNode{
elemtype data;
LNode* next;
};
void InitList(LNode* &HL)
{
HL=NULL; }
bool InsertList(LNode* &HL,elemtype item,int pos)//插入
{
if(pos<-1){
cout<<"pos值无效!"<<endl; return false;
}
LNode* newptr;
newptr=new LNode;
newptr->data =item;
LNode* cp=HL;
LNode* ap=NULL;
if(pos==0){
while(cp!=NULL) {
if(item<cp->data ) break;
else {
ap=cp;
cp=cp->next;
}
}
}
else if(pos==-1)
while(cp!=NULL){ap=cp;cp=cp->next;}
else {
int i=0;
while(cp!=NULL){
i++;
if(i==pos)break;
else {
ap=cp;cp->next;
}
}
if(cp==NULL && i+1<pos) {
cout<<"pos值超出单链表长度加1!"<<endl;
return false;
}
}
if(ap==NULL) {
newptr->next=HL;
HL=newptr;
}
else
{
newptr->next=cp;
ap->next=newptr;
}
return true;
}
void ClearList(LNode*& HL)//清空
{
LNode* cp;
LNode* np;
cp=HL;
while (cp!=NULL) {
np=cp->next;
delete cp;
cp=np;
}
HL=NULL;
}
void TraverseList(LNode* HL)//遍历
{
while(HL!=NULL) {
cout<<HL->data <<" ";
HL=HL->next;
}
cout<<endl;
} void main()
{
LNode *a,*b;
InitList(a);InitList(b);
term ra[4]={{5,0},{3,2},{-6,3},{2,5}};
term rb[6]={{3,0},{4,1},{-2,2},{3,3},{-2,5},{9,6}};
int i;
for(i=3;i>=0;i--) InsertList(a,ra[i],1);
for(i=5;i>=0;i--) InsertList(b,rb[i],1);
cout<<"线性表a:";
TraverseList(a);
cout<<"线性表b:";
TraverseList(b);
LNode *c=PolyAdd2(a,b);
cout<<"";
TraverseList(c);
ClearList(a);ClearList(b);ClearList(c);
}
LNode*PolyAdd2(LNode *p1,LNode *p2)
{
LNode* p3;
p3= new LNode;
LNode *t1=p1, *t2=p2,*t3=p3;
while(t1 && t2) {
if (t1->data.exp<t2->data.exp) {
t3=t3->next=new LNode;
t3->data=t1->data;
t1=t1->next;
}
else if (t1->data.exp>t2->data.exp) {
t3=t3->next=new LNode;
t3->data=t2->data;
t12=t2->next;
}
else {
double a=t1->data.coef+t2->data.coef;
if(a!=0) {
term item={a,t1->data.exp};
t3=t3->next=new LNode;
t3->data=item;
}
t1=t1->next;
t2=t2->next;
}
}
while (t1) {
t3=t3->next=new LNode;
t3->data=t1->data;
t1=t1->next;
}
while (t2) {
t3=t3->next=new LNode;
t3->data=t2->data;
t2=t2->next;
}
t3->next=NULL;
t3=p3;
p3=t3->next;
delete t3;
return t3;
}
#include<stdlib.h>
#include<math.h>
struct term {
double coef;
int exp;
};
typedef term elemtype;
struct LNode{
elemtype data;
LNode* next;
};
void InitList(LNode* &HL)
{
HL=NULL; }
bool InsertList(LNode* &HL,elemtype item,int pos)//插入
{
if(pos<-1){
cout<<"pos值无效!"<<endl; return false;
}
LNode* newptr;
newptr=new LNode;
newptr->data =item;
LNode* cp=HL;
LNode* ap=NULL;
if(pos==0){
while(cp!=NULL) {
if(item<cp->data ) break;
else {
ap=cp;
cp=cp->next;
}
}
}
else if(pos==-1)
while(cp!=NULL){ap=cp;cp=cp->next;}
else {
int i=0;
while(cp!=NULL){
i++;
if(i==pos)break;
else {
ap=cp;cp->next;
}
}
if(cp==NULL && i+1<pos) {
cout<<"pos值超出单链表长度加1!"<<endl;
return false;
}
}
if(ap==NULL) {
newptr->next=HL;
HL=newptr;
}
else
{
newptr->next=cp;
ap->next=newptr;
}
return true;
}
void ClearList(LNode*& HL)//清空
{
LNode* cp;
LNode* np;
cp=HL;
while (cp!=NULL) {
np=cp->next;
delete cp;
cp=np;
}
HL=NULL;
}
void TraverseList(LNode* HL)//遍历
{
while(HL!=NULL) {
cout<<HL->data <<" ";
HL=HL->next;
}
cout<<endl;
} void main()
{
LNode *a,*b;
InitList(a);InitList(b);
term ra[4]={{5,0},{3,2},{-6,3},{2,5}};
term rb[6]={{3,0},{4,1},{-2,2},{3,3},{-2,5},{9,6}};
int i;
for(i=3;i>=0;i--) InsertList(a,ra[i],1);
for(i=5;i>=0;i--) InsertList(b,rb[i],1);
cout<<"线性表a:";
TraverseList(a);
cout<<"线性表b:";
TraverseList(b);
LNode *c=PolyAdd2(a,b);
cout<<"";
TraverseList(c);
ClearList(a);ClearList(b);ClearList(c);
}
LNode*PolyAdd2(LNode *p1,LNode *p2)
{
LNode* p3;
p3= new LNode;
LNode *t1=p1, *t2=p2,*t3=p3;
while(t1 && t2) {
if (t1->data.exp<t2->data.exp) {
t3=t3->next=new LNode;
t3->data=t1->data;
t1=t1->next;
}
else if (t1->data.exp>t2->data.exp) {
t3=t3->next=new LNode;
t3->data=t2->data;
t12=t2->next;
}
else {
double a=t1->data.coef+t2->data.coef;
if(a!=0) {
term item={a,t1->data.exp};
t3=t3->next=new LNode;
t3->data=item;
}
t1=t1->next;
t2=t2->next;
}
}
while (t1) {
t3=t3->next=new LNode;
t3->data=t1->data;
t1=t1->next;
}
while (t2) {
t3=t3->next=new LNode;
t3->data=t2->data;
t2=t2->next;
}
t3->next=NULL;
t3=p3;
p3=t3->next;
delete t3;
return t3;
}

