Answer to Question #236957 in C for avinash

Question #236957

How to represent a polynomial using linked list? Write the the

program to add three polynomials.


1
Expert's answer
2021-09-14T05:18:14-0400

A polynomial can be represented:

#include <iostream>
#include <iomanip.h>
using namespace std;

struct poly {
    int coeff;
    int pow_val;
    poly* next;
};

class add {
    poly *poly1, *poly2, *poly3;

public:
    add() { poly1 = poly2 = poly3 = NULL; }
    void addpoly();
    void display();
};

void add::addpoly()
{
    int i, p;
    poly *newl = NULL, *end = NULL;
    cout << "Enter highest power for x\n"; cin >> p;
    //Read first poly
    cout << "\nFirst Polynomial\n"; for (i = p; i >= 0; i--) {
        newl = new poly;
        newl->pow_val = p;
        cout << "Enter Co-efficient for degree" << i << ":: "; cin >> newl->coeff;
        newl->next = NULL;
        if (poly1 == NULL)
            poly1 = newl;
        else
            end->next = newl;
        end = newl;
    }

    //Read Second poly
    cout << "\n\nSecond Polynomial\n"; end = NULL; for (i = p; i >= 0; i--) {
        newl = new poly;
        newl->pow_val = p;
        cout << "Enter Co-efficient for degree" << i << ":: "; cin >> newl->coeff;
        newl->next = NULL;
        if (poly2 == NULL)
            poly2 = newl;
        else
            end->next = newl;
        end = newl;
    }

    //Addition Logic
    poly *p1 = poly1, *p2 = poly2;
    end = NULL;
    while (p1 != NULL && p2 != NULL) {
        if (p1->pow_val == p2->pow_val) {
            newl = new poly;
            newl->pow_val = p--;
            newl->coeff = p1->coeff + p2->coeff;
            newl->next = NULL;
            if (poly3 == NULL)
                poly3 = newl;
            else
                end->next = newl;
            end = newl;
        }
        p1 = p1->next;
        p2 = p2->next;
    }
}

void add::display()
{
    poly* t = poly3;
    cout << "\n\nAnswer after addition is : ";
    while (t != NULL) {
        cout.setf(ios::showpos);
        cout << t->coeff;
        cout.unsetf(ios::showpos);
        cout << "X" << t->pow_val;
        t = t->next;
    }
}
int main()
{
    add obj;
    obj.addpoly();
    obj.display();
}


program to add polynomials:


#include <iostream>
using namespace std;

class polyll {
private:
    struct polynode {
        float coeff;
        int exp;
        polynode* link;
    } * p;

public:
    polyll();
    void poly_append(float c, int e);
    void display_poly();
    void poly_add(polyll& l1, polyll& l2);
    ~polyll();
};
polyll::polyll()
{
    p = NULL;
}
void polyll::poly_append(float c, int e)
{
    polynode* temp = p;
    if (temp == NULL) {
        temp = new polynode;
        p = temp;
    }
    else {
        while (temp->link != NULL)
            temp = temp->link;
        temp->link = new polynode;
        temp = temp->link;
    }
    temp->coeff = c;
    temp->exp = e;
    temp->link = NULL;
}
void polyll::display_poly()
{
    polynode* temp = p;
    int f = 0;

    cout << endl; while (temp != NULL) { if (f != 0) { if (temp->coeff > 0)
                cout << " + ";
            else
                cout << " "; } if (temp->exp != 0)
            cout << temp->coeff << "x^" << temp->exp;
        else
            cout << temp->coeff;
        temp = temp->link;
        f = 1;
    }
}
void polyll::poly_add(polyll& l1, polyll& l2)
{
    polynode* z;
    if (l1.p == NULL && l2.p == NULL)
        return;
    polynode *temp1, *temp2;
    temp1 = l1.p;
    temp2 = l2.p;
    while (temp1 != NULL && temp2 != NULL) {
        if (p == NULL) {
            p = new polynode;
            z = p;
        }
        else {
            z->link = new polynode;
            z = z->link;
        }
        if (temp1->exp < temp2->exp) {
            z->coeff = temp2->coeff;
            z->exp = temp2->exp;
            temp2 = temp2->link;
        }
        else {
            if (temp1->exp > temp2->exp) {
                z->coeff = temp1->coeff;
                z->exp = temp1->exp;
                temp1 = temp1->link;
            }
            else {
                if (temp1->exp == temp2->exp) {
                    z->coeff = temp1->coeff + temp2->coeff;
                    z->exp = temp1->exp;
                    temp1 = temp1->link;
                    temp2 = temp2->link;
                }
            }
        }
    }
    while (temp1 != NULL) {
        if (p == NULL) {
            p = new polynode;
            z = p;
        }
        else {
            z->link = new polynode;
            z = z->link;
        }
        z->coeff = temp1->coeff;
        z->exp = temp1->exp;
        temp1 = temp1->link;
    }
    while (temp2 != NULL) {
        if (p == NULL) {
            p = new polynode;
            z = p;
        }
        else {
            z->link = new polynode;
            z = z->link;
        }
        z->coeff = temp2->coeff;
        z->exp = temp2->exp;
        temp2 = temp2->link;
    }
    z->link = NULL;
}
polyll::~polyll()
{
    polynode* q;
    while (p != NULL) {
        q = p->link;
        delete p;
        p = q;
    }
}
int main()
{
    polyll p1;
    p1.poly_append(1.4, 5);
    p1.poly_append(1.5, 4);
    p1.poly_append(1.7, 2);
    p1.poly_append(1.8, 1);
    p1.poly_append(1.9, 0);
    cout << "\nFirst polynomial:";
    p1.display_poly();
    polyll p2;
    p2.poly_append(1.5, 6);
    p2.poly_append(2.5, 5);
    p2.poly_append(-3.5, 4);
    p2.poly_append(4.5, 3);
    p2.poly_append(6.5, 1);
    cout << "\nSecond polynomial:";
    p2.display_poly();
    polyll p3;
    p3.poly_add(p1, p2);
    cout << "\nResultant polynomial: ";
    p3.display_poly();
    getch();
}

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

Comments

No comments. Be the first!

Leave a comment

LATEST TUTORIALS
New on Blog
APPROVED BY CLIENTS