1 #include <iostream> 2 #include<stdlib.h> 3 4 using namespace std; 5 6 typedef struct LNode 7 { 8 int coef;//系数 9 int expn;//指数 10 struct LNode *next; 11 }LNode,*LinkList; 12 13 14 int CreateList_L(LinkList &L,int n)//默认指数按升序排列 15 { 16 LinkList p,q; 17 for(int i=0;i<n;i++) 18 { 19 p=(LinkList)malloc(sizeof(LNode)); 20 cout<<"输入元素系数:"; 21 cin>>p->coef; 22 cout<<"输入元素指数:"; 23 cin>>p->expn; 24 if(i==0)L=p; 25 else q->next=p; 26 q=p; 27 p->next=NULL; 28 } 29 return 0; 30 } 31 32 33 int Display_L(LinkList L) 34 { 35 if(!L)cout<<"f(x)=0"<<endl; 36 else 37 { 38 cout<<"f(x)="<<L->coef; 39 if(L->expn)cout<<"*"<<"x^"<<L->expn; 40 L=L->next; 41 while(L) 42 { 43 if(L->coef>0) 44 { 45 cout<<"+"; 46 cout<<L->coef<<"*"<<"x^"<<L->expn; 47 } 48 else cout<<L->coef<<"*"<<"x^"<<L->expn; 49 L=L->next; 50 } 51 } 52 return 0; 53 } 54 55 56 int AddPolyn(LinkList La,LinkList Lb,LinkList &Lc) 57 { 58 LinkList pa,pb,p; 59 int k=1; 60 pa=La;pb=Lb; 61 //确定“和多项式”的头结点 62 while(k) 63 { 64 if(pa->expn<pb->expn){p=Lc=pa;pa=pa->next;k=0;} 65 else if(pa->expn>pb->expn){p=Lc=pb;pb=pb->next;k=0;} 66 else 67 { 68 pa->coef+=pb->coef; 69 if(pa->coef) 70 { 71 p=Lc=pa; 72 pa=pa->next; 73 k=0; 74 } 75 else 76 { 77 pa=pa->next; 78 pb=pb->next; 79 if(!pa||!pb) break; 80 } 81 } 82 } 83 if(!pb&&pa){p=Lc=pa;pa=pa->next;} 84 if(!pa&&pb){p=Lc=pb;pb=pb->next;} 85 if(!pa&&!pb) Lc=NULL; 86 //确定接下来的节点 87 while(pa&&pb) 88 { 89 if(pa->expn<pb->expn){p->next=pa;p=pa;pa=pa->next;} 90 else if(pa->expn>pb->expn){p->next=pb;p=pb;pb=pb->next;} 91 else 92 { 93 pa->coef+=pb->coef; 94 if(pa->coef) 95 { 96 p->next=pa; 97 p=pa; 98 pa=pa->next; 99 pb=pb->next; 100 } 101 else 102 { 103 pa=pa->next; 104 pb=pb->next; 105 } 106 107 } 108 } 109 while(!pb&&pa) 110 { 111 p->next=pa; 112 p=pa; 113 pa=pa->next; 114 } 115 while(!pa&&pb) 116 { 117 p->next=pb; 118 p=pb; 119 pb=pb->next; 120 } 121 return 0; 122 } 123 124 125 126 int main() 127 { 128 LinkList La,Lb,Lc; 129 int m,n; 130 cout<<"请输入La中的元素个数:"; 131 cin>>m; 132 CreateList_L(La,m); 133 cout<<"请输入Lb中的元素个数:"; 134 cin>>n; 135 CreateList_L(Lb,n); 136 AddPolyn(La,Lb,Lc); 137 Display_L(Lc); 138 return 0; 139 }