一元稀疏多項式計算 (資料結構實驗)
阿新 • • 發佈:2018-12-19
#include <bits/stdc++.h> using namespace std; struct node{ float coef;//係數 int exp;//指數 node * next; }; node * creat(node * l) { float coef; int exp; l = new node; node * p,* q; scanf("%f %d",&coef,&exp); p=l; while(coef!=0||exp!=0) { p->coef = coef; p->exp = exp; p->next = new node; q = p; p=p->next; scanf("%f %d",&coef,&exp); } q->next=NULL; return l; } void Print(node * l) { node * q = l; while(q!=NULL) { if(q->coef>0&&l!=q&&l!=q) { cout<<"+"; } cout<<q->coef<<"x^"<<q->exp; q=q->next; } cout<<"\n"; } void sortList(node *l) { node * p,*q; for(p=l;p!=NULL;p=p->next) { q=l; for(q=l;q->next!=NULL;q=q->next) if(p->exp<q->exp) { int tmpe; float tmpf; tmpe = p->exp; p->exp = q ->exp; q->exp =tmpe; tmpf = p->coef; p->coef = q ->coef; q->coef =tmpf; } } } node * merge(node *a,node *b,node *c,float flag) { node *p,*q,*l,*lq; p=a; q=b; //coef係數 c=new node; l=c; while(p!=NULL&&q!=NULL) { if(p->exp < q->exp) { l->coef = p->coef; l->exp =p->exp; l->next = new node; lq = l; l = l->next; l->coef = q->coef; l->exp =q->exp; l->next = new node; lq = l; l = l->next; }else if(p->exp > q->exp) { l->coef = q->coef; l->exp =q->exp; l->next = new node; lq = l; l = l->next; l->coef = p->coef; l->exp =p->exp; l->next = new node; lq = l; l = l->next; }else { l->coef = p->coef+(flag)*q->coef; l->exp = p->exp; lq=l; l->next = new node; l=l->next; } if(p!=NULL) p=p->next; if(q!=NULL) q=q->next; } l=new node; while(p!=NULL) { l->coef = p->coef; l->exp =p->exp; l->next = new node; lq = l; l = l->next; p=p->next; } while(q!=NULL) { l->coef = q->coef; l->exp =q->exp; l->next = new node; lq = l; l = l->next; q=q->next; } lq->next = NULL; return c; } int main() { node *a,*b,*c; cout<<"please input in accordance with the format: (***) \n"; cout<<"the first formula\n"; a = creat(a); cout<<"the second formula\n"; b = creat(b); sortList(a); sortList(b); cout<<"the first formula: "; Print(a); cout<<"the second formula: ";Print(b); float plus=1,mins=-1; c = merge(a,b,c,plus); cout<<"plus: ";Print(c); c = merge(a,b,c,mins); cout<<"mins: ";Print(c); } /* 3 1 -2 2 6 3 0 0 1 1 1 2 1 3 0 0 */