# Find the sum of two polynomials

0 like 0 dislike
6.3k views

Design, Develop and Implement a Program in C for the following operations on Singly Linked List

• Find the sum of two polynomials

0 like 0 dislike
by Goeduhub's Expert (7.6k points)
edited

## Design, Develop and Implement a Program in C for the following operations on Singly Linked List Find the sum of two polynomials

Given two polynomial numbers represented by a linked list. Write a function that add these lists means add the coefficients who have same variable powers.

Example:

Input:
1st number = 5x2 + 4x1 + 2x0
2nd number = 5x1 + 5x0
Output:
5x2 + 9x1 + 7x0
Input:
1st number = 5x3 + 4x2 + 2x0
2nd number = 5x1 + 5x0
Output:
5x3 + 4x2 + 5x1 + 7x0

Program

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

struct Node

int coeff;

int pow;

struct Node *next;

};

// Function to create new node

void create_node(int x, int y, struct Node **temp)

struct Node *r, *z;

z = *temp;

if(z == NULL)

{

r =(struct Node*)malloc(sizeof(struct Node));

r->coeff = x;

r->pow = y;

*temp = r;

r->next = (struct Node*)malloc(sizeof(struct Node));

r = r->next;

r->next = NULL;

}

else

{

r->coeff = x;

r->pow = y;

r->next = (struct Node*)malloc(sizeof(struct Node));

r = r->next;

r->next = NULL;

}

}

// Function Adding two polynomial numbers

void polyadd(struct Node *poly1, struct Node *poly2, struct Node *poly)

while(poly1->next && poly2->next)

{

// If power of 1st polynomial is greater then 2nd, then store 1st as it is

// and move its pointer

if(poly1->pow > poly2->pow)

{

poly->pow = poly1->pow;

poly->coeff = poly1->coeff;

poly1 = poly1->next;

}

// If power of 2nd polynomial is greater then 1st, then store 2nd as it is

// and move its pointer

else if(poly1->pow < poly2->pow)

{

poly->pow = poly2->pow;

poly->coeff = poly2->coeff;

poly2 = poly2->next;

}

// If power of both polynomial numbers is same then add their coefficients

else

{

poly->pow = poly1->pow;

poly->coeff = poly1->coeff+poly2->coeff;

poly1 = poly1->next;

poly2 = poly2->next;

}

// Dynamically create new node

poly->next = (struct Node *)malloc(sizeof(struct Node));

poly = poly->next;

poly->next = NULL;

}

while(poly1->next || poly2->next)

{

if(poly1->next)

{

poly->pow = poly1->pow;

poly->coeff = poly1->coeff;

poly1 = poly1->next;

}

if(poly2->next)

{

poly->pow = poly2->pow;

poly->coeff = poly2->coeff;

poly2 = poly2->next;

}

poly->next = (struct Node *)malloc(sizeof(struct Node));

poly = poly->next;

poly->next = NULL;

}

}

// Display Linked list

void show(struct Node *node)

while(node->next != NULL)

{

printf("%dx^%d", node->coeff, node->pow);

node = node->next;

if(node->next != NULL)

printf(" + ");

}

}

int main()

struct Node *poly1 = NULL, *poly2 = NULL, *poly = NULL;

// Create first list of 5x^2 + 4x^1 + 2x^0

create_node(5,2,&poly1);

create_node(4,1,&poly1);

create_node(2,0,&poly1);

// Create second list of 5x^1 + 5x^0

create_node(5,1,&poly2);

create_node(5,0,&poly2);

printf("1st Number: ");

show(poly1);

printf("\n2nd Number: ");

show(poly2);

poly = (struct Node *)malloc(sizeof(struct Node));

// Function add two polynomial numbers

// Display resultant List

show(poly);

return 0;

}

Output

## For more Visvesvaraya Technological University(VTU) CSE-III Sem Data Structure Lab Experiments Click Here

Learn & Improve In-Demand Data Skills Online in this Summer With  These High Quality Courses[Recommended by GOEDUHUB]:-

Best Data Science Online Courses[Lists] on:-

Claim your 10 Days FREE Trial for Pluralsight.