"Polynominal.h":
#include <iostream>using namespacestd;classpolynominal;classterm{ Public: Term (intCinte); Term (intCintE, term*next); term* InsertAfter (intCinte);Private: intCoef; intexp; term*link; Friend Ostream&operator<< (Ostream &,ConstTerm &); Friendclasspolynominal;}; Term::term (intCinte): Coef (c), exp (e) {link=0;} Term::term (intCintE, term*next): Coef (c), exp (e) {link=Next;} term* Term::insertafter (intCinte) {Link=NewTerm (c, E, link); returnlink;} Ostream&operator<< (Ostream & out,Constterm&val) { if(Val.coef = =0) return out; out<<Val.coef; Switch(val.exp) { Case 0: Break; Case 1: out<<"X"; Break; default: out<<"x^"<< Val.exp; Break; } return out;}classpolynominal{ Public: Polynominal (); ~polynominal (); voidOutput (ostream& out)Const; voidAddterms (istream&inch); voidPolyadd (polynominal&R); voidPolymult (polynominal&R);Private: term*thelist; Friend Ostream&operator<< (Ostream &,ConstPolynominal &); Friend IStream&operator>> (IStream &, Polynominal &); Friend Polynominal&operator+ (polynominal &, Polynominal &); Friend Polynominal&operator* (polynominal &, Polynominal &);}; Polynominal::P olynominal () {thelist=NewTerm (0, -1); Thelist->link =thelist;} Polynominal::~polynominal () { term* p = thelist->link; while(P! =thelist) {thelist->link = p->link; Deletep; P= thelist->link; } Deletethelist;}voidPolynominal::addterms (IStream &inch) { term* Q =thelist; intC, E; for (;;) {cout<<"Input a term (coef,exp): \ n"<<Endl; CIN>> C >>e; if(E <0) Break; Q= q->InsertAfter (c, E); }}voidPolynominal::output (ostream& out)Const{ intFirst =1; term*p = thelist->link; cout<<"The polynominal is:\n"<<Endl; for(; p! = thelist; p = p->link) { if(!first && (P->coef >0)) out<<"+"; First=0; out<< *p; } cout<<"\ n"<<Endl;}voidPolynominal::P Olyadd (polynominal&R) { term* Q, *Q1 = thelist, *Q; P= r.thelist->link; Q= q1->link; while(P->exp >=0) { while(P->exp < q->exp) {Q1= q; Q = q->link; } if(P->exp = = q->exp) {Q->coef = Q->coef + p->Coef; if(Q->coef = =0) {Q1->link = q->link; Delete(q); Q= q1->link; } Else{Q1= q; Q = q->link; } } ElseQ1= Q1->insertafter (P->coef, p->exp); p = p->link; }}ostream&operator<< (Ostream & out,ConstPolynominal &x) {X.output ( out); return out;} IStream&operator>> (IStream &inch, Polynominal &x) {X.addterms (inch); return inch;} Polynominal&operator+ (Polynominal &a, Polynominal &C) {A.polyadd (b); returnA;}voidPolynominal::P olymult (Polynominal &R) { term* Q, *q1=thelist, *p,*mult; P= r.thelist->link; Q= q1->link; Polynominal temp; intc =0, E =0; Mult= temp.thelist->link; for(q = r.thelist->link; p->exp >=0; p = p->link) { for(; Q->exp >=0; Q = q->link) {C= p->coef*q->Coef; E= p->exp*q->exp; Mult=mult->InsertAfter (c, E); } } for(P = temp.thelist->link,q= This->thelist->link; P->exp >=0; p = p->link) { if(Q->exp >=0) {Q->coef = q->Coef; Q->exp = p->exp; Q= q->link; } Else{C= p->Coef; E= p->exp; Q-InsertAfter (c, E); }}}polynominal&operator* (Polynominal &a, Polynominal &b) {A.polymult (b); returnA;}
"Polyominal.cpp":
1#include"polynominal.h"2 voidMain ()3 {4 polynominal p, q;5CIN >>p;6cout <<p;7CIN >>Q;8cout <<Q;9Q = q +p;Tencout <<Q; OneQ = q*p; Acout <<Q; -System"Pause"); -}
Linked list for polynomial addition and multiplication