Write a program to add two polynomials using a linked list


#include
#include
#include

struct poly_node
{
            int coeff, expo;
            struct poly_node *link;
};

typedef struct poly_node poly;
poly *insert_polynode(int, int, poly*);



class polynode
{
            public:
                        poly *insert_polynode(int coeff, int expo, poly *polynomial);
                        poly *create_polynomial();
                        void display_polynomial(poly *p);
                        poly *add_polynomial(poly *poly1, poly *poly2);
};

poly *polynode::insert_polynode(int coeff, int expo, poly *polynomial)
{
            poly *newnode, *currptr, *prevnode;
            newnode = new poly;
            newnode->coeff = coeff;
            newnode->expo = expo;
            newnode->link = NULL;
            if (!polynomial)
            {
                        return newnode;
            }
            prevnode = polynomial;
            for (currptr=polynomial ;currptr ;currptr=currptr->link )
            {
                        prevnode = (poly*)currptr;
            }
            prevnode->link = newnode;
            return polynomial;
}

poly *polynode::create_polynomial()
{
            int coeff, expo;
            poly *polynomial = NULL;
            while (1)
            {
                        cout <<  "\nEnter coefficient and exponent :\t" ;
                        cin >> coeff >> expo;
                        if (coeff==0)
                        {
                                    continue;
                        }
                        polynomial = insert_polynode(coeff, expo, polynomial);
                        if (expo==0)
                        {
                                    break;
                        }
            }
            return polynomial;
}

void polynode::display_polynomial(poly *p)
{
            poly *currptr;
            for (currptr=p ;currptr ;currptr=currptr->link )
            {
                        if (currptr->expo==0)
                        {
                                    cout << currptr->coeff;
                        }
                        else if (currptr->coeff!=0)
                        {
                                    cout <coeff << "X^" << currptr->expo << " + " ;
                        }
            }
}

poly *polynode::add_polynomial(poly *poly1, poly *poly2)
{
            poly *p1, *p2, *result=NULL;
            p1 = poly1;
            p2 = poly2;
            while (p1&&p2)
            {
                        if (p1->expo>p2->expo)
                        {
                                    result = insert_polynode(p1->coeff, p1->expo,result);
                                    p1 = p1->link;
                        }
                        else if (p1->expoexpo)
                        {
                                    result = insert_polynode(p2->coeff, p2->expo, result);
                                    p2 = p2->link;
                        }
                        else
                        {
                                    result = insert_polynode(p1->coeff+p2->coeff, p1->expo, result);
                                    p1 = p1->link;
                                    p2 = p2->link;
                        }
            }
            while (p1)
            {
                        result = insert_polynode(p1->coeff, p1->expo, result);
                        p1->link = p1;
            }
            while (p2)
            {
                        result = insert_polynode(p2->coeff, p2->expo, result);
                        p2->link = p2;
            }
            return result;
}

void main()
{
            polynode obj;
            poly *poly1 = NULL, *poly2 = NULL, *poly3 = NULL;
            clrscr();
            cout << "\nEnter First polynomial\n" ;
            poly1 = obj.create_polynomial();
            cout << "\n\n" ;
            obj.display_polynomial(poly1);
            cout << "\n\nEnter Second polynomial\n" ;
            poly2 = obj.create_polynomial();
            cout << "\n\n" ;
            obj.display_polynomial(poly2);
            cout << "\n\nAddition of two polynomials\n" ;
            poly3 = obj.add_polynomial(poly1, poly2);
            cout << "\n\n" ;
            obj.display_polynomial(poly3);
            getch();
}

Comments

Popular posts from this blog

To convert hexadecimal to decimal numbers.

To convert hexadecimal to decimal numbers.