Polynomial addition Operation using C++[2.65]

来源:互联网 发布:城管打人 知乎 编辑:程序博客网 时间:2024/05/22 03:12

Using a linked list to achieve a sum of one yuan polynomial, and later may continue to expand functions.

#include <iostream>using namespace std;struct PolyNode{float coef;int exp;struct PolyNode* next;};class LinkList{public:LinkList();LinkList(float a[],int b[],int n);~LinkList();int ListLength();void Get(int pos);int Locate(int item);void PrintLinkList();void Insert(int pos,int item);void Delete(int i);PolyNode* GetHead();private:PolyNode *head;PolyNode *rear;PolyNode *next;PolyNode *p;    PolyNode *q;    PolyNode *s;};LinkList::LinkList(){head = new PolyNode;head->next = NULL;}LinkList::~LinkList(){p = head->next;while(p){q = p;p = p->next;delete q;}head = NULL;}PolyNode* LinkList::GetHead(){return head;}LinkList::LinkList(float a[],int b[],int n){head = new PolyNode;p = head;for(int i=0;i<n;++i){s = new PolyNode;s->coef = a[i];s->exp = b[i];p->next = s;p = s;}p->next = NULL; }void LinkList::PrintLinkList(){p = head->next;while(p){cout<<p->coef<<"x^"<<p->exp;if(p->next)if(p->next->coef>=0)cout<<"+";p = p->next;}cout<<endl;}void Add(LinkList &A,LinkList &B){PolyNode *s = new PolyNode;PolyNode *k = new PolyNode;PolyNode *j = new PolyNode;j->next = k;PolyNode *pa =new PolyNode;PolyNode *pb = new PolyNode;pa = A.GetHead()->next;pb = B.GetHead()->next;while(pa&&pb){if(pa->exp<pb->exp){s = new PolyNode;s->coef = pa->coef;s->exp =pa->exp;k->next = s;k = k->next;pa = pa->next; }else if(pa->exp==pb->exp){pa->coef = pa->coef+pb->coef;if(pa->coef==0){}else{s = new PolyNode;s->coef = pa->coef;s->exp =pa->exp;k->next = s;k = k->next;}pa = pa->next;pb = pb->next;}else {s = new PolyNode;s->coef = pb->coef;s->exp =pb->exp;k->next = s;k = k->next;pb = pb->next;}}while(pb){k->next = pb;k = k->next;pb = pb->next;}while(pa){k->next = pa;k = k->next;pa = pa->next;}//printPolyNode *p = new PolyNode;p = j->next->next;while(p){cout<<p->coef<<"x^"<<p->exp;if(p->next)if(p->next->coef>=0)cout<<"+";p = p->next;}cout<<endl;}int main(){int m,n;float s;int k;float *a,*c;int *b,*d;cout<<"The first polynomial term:";cin>>m;a = new float[m];b = new int [m];for(int i = 0;i<m;++i){cout<<"The"<<i+1<<"coefficient:";cin>>s;a[i] = s;cout<<"The"<<i+1<<"index:";cin>>k;b[i] = k;}cout<<"The second polynomial term:";cin>>n;c = new float[n];d = new int [n];for(int i = 0;i<n;++i){cout<<"The"<<i+1<<"coefficient:";cin>>s;c[i] = s;cout<<"The"<<i+1<<"index:";cin>>k;d[i] = k;}LinkList A(a,b,m),B(c,d,n);cout<<"---Print A---"<<endl;A.PrintLinkList();cout<<"---Print B---"<<endl;B.PrintLinkList();cout<<"---Print A+B---"<<endl;Add(A,B);cout<<"--------";return 0;}