In: Computer Science
In this assignment, you will implement a Polynomial linked list, the coefficients and exponents of the polynomial are defined as a node. The following 2 classes should be defined.
Solution: Input: 1st number = 5x^2 + 4x^1 + 2x^0 2nd number = 5x^1 + 5x^0 Output: 5x^2 + 9x^1 + 7x^0 Input: 1st number = 5x^3 + 4x^2 + 2x^0 2nd number = 5x^1 + 5x^0 Output: 5x^3 + 4x^2 + 5x^1 + 7x^0
// C++ program for addition of two polynomials
// using Linked Lists
#include<bits/stdc++.h>
using
namespace
std;
// Node structure containing power and coefficient of
variable
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
(
"
+ "
);
}
}
// Driver program
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
polyadd(poly1, poly2,
poly);
// Display resultant
List
printf
(
"\nAdded
polynomial: "
);
show(poly);
return
0;
}
Output:
1st Number: 5x^2 + 4x^1 + 2x^0 2nd Number: 5x^1 + 5x^0 Added polynomial: 5x^2 + 9x^1 + 7x^0
Time Complexity: O(m + n) where m and n are number of nodes in first and second lists respectively.
note: plzzz don't give dislike.....plzzz comment if you have any problem i will try to solve your problem.....plzzz give thumbs up i am in need....