多項式相加減
阿新 • • 發佈:2018-11-26
單鏈表多項式的相加減
#include<cstdio> #include<iostream> using namespace std; typedef struct pnode{ int a; //係數 int na; //指數 struct pnode *next; //指標域 }pnode,*plist; void creatlist(plist &L,int n) { plist s,pre,q,star; L=new pnode; L->next=NULL; //先建立一個帶頭結點的空連結串列 star=L ; for(int i=1;i<=n;i++) //輸入多項式 { s=new pnode; cin>>s->a>>s->na; //輸入係數以及指數 pre=L; //插入s 的前驅位置 q=L->next; //插入s 的後驅位置 while(q&&q->na<s->na) { //找出s的合適位置,使多項式有序輸出 pre=q; q=q->next; } s->next=q; pre->next=s; if(s->a==0&&s->na==0)break; //如果係數、指數為0,結束輸入 } star=L->next; //star指向連結串列的首元結點 /******輸出寫入的多項式******/ while(star->next) { printf("%dx^%d+",star->a,star->na); star=star->next; } printf("%dx^%d\n",star->a,star->na); } void dxs(plist &L1,plist &L2) { //三種情況(1、合併項為0 2、L2多項式的項小於對應的L1的項 3、 L2多項式的項大於對應的L1的項 plist p,p1,p2,star,c; int sum; p1=L1->next; p2=L2->next; p=L1; c=L1; while(p1&&p2) { if(p1->na==p2->na) //p1元素的項與p2元素對應的項相等,求和 { sum=p1->a+p2->a; if(sum!=0) //和不為0.將和式鏈入合併表 ,p1\p2指向下一結點 { p1->a=sum; p->next=p1; p=p1; p1=p1->next; p2=p2->next; } else //和為0. p1\p2指向下一結點 if(sum==0) { p1=p1->next; p2=p2->next; } } else //(P1多項式的項小於對應的P2的項 (把P1的這一項鍊入合併項,並且P1指向下一個結點) if(p1->na<p2->na) { p->next=p1; p=p1; p1=p1->next; } else //P1多項式的項大於對應的P2的項 (把P2的這一項鍊入合併項,並且P2指向下一個結點) { p->next=p2; p=p2; p2=p2->next; } } p->next=p1?p1:p2; //把兩個多項式多餘的鏈 鏈進來 star=c->next; /******輸出合併後的多項式(注意格式,先不輸出最後一項)******/ while(star->next) { printf("%dx^%d",star->a,star->na); star=star->next; } printf("%dx^%d\n",star->a,star->na); //最後一項 } int main() { plist L1,L2; int n,m; printf("輸入兩個多項式項元素個數:"); cin>>n>>m; creatlist(L1,n); creatlist(L2,m); printf("合併後為:\n"); dxs(L1,L2); }