DSA ADD Polynomial using Singly

PHOTO EMBED

Fri Aug 25 2023 06:24:23 GMT+0000 (Coordinated Universal Time)

Saved by @Astik

#include <stdio.h>
#include <stdlib.h>
#include<conio.h>

struct node {

    int coefficient;
    int exponent;
    struct node* next;

};

struct node* create_node(int coef, int exp) {
    struct node* new_node = (struct node*)malloc(sizeof(struct node));
    new_node->coefficient = coef;
    new_node->exponent = exp;
    new_node->next = NULL;
    return new_node;
}
void insert_term(struct node** poly, int coef, int exp) {
    if (*poly == NULL) {
	*poly = create_node(coef, exp);
    } else {
	struct node* temp = *poly;
	while (temp->next != NULL) {
	    temp = temp->next;
	}
	temp->next = create_node(coef, exp);
    }

}

struct node* add_polynomials(struct node* poly1, struct node* poly2) {
    struct node* result = NULL;
    while (poly1 != NULL && poly2 != NULL) {
	if (poly1->exponent > poly2->exponent) {
	    insert_term(&result, poly1->coefficient, poly1->exponent);
	    poly1 = poly1->next;
	} else if (poly1->exponent < poly2->exponent) {
	    insert_term(&result, poly2->coefficient, poly2->exponent);
	    poly2 = poly2->next;
	} else {
	    int sum = poly1->coefficient + poly2->coefficient;
	    if (sum != 0) {
		insert_term(&result, sum, poly1->exponent);
	    }
	    poly1 = poly1->next;
	    poly2 = poly2->next;
	}
    }
    while (poly1 != NULL) {
	insert_term(&result, poly1->coefficient, poly1->exponent);
	poly1 = poly1->next;
    }
    while (poly2 != NULL) {
	insert_term(&result, poly2->coefficient, poly2->exponent);
	poly2 = poly2->next;
    }
   return result;
}

void display_polynomial(struct node* poly) {
    while (poly != NULL) {
	printf("%dx^%d", poly->coefficient, poly->exponent);
	poly = poly->next;
	if (poly != NULL) {
	    printf(" + ");
	}
    }
    printf("\n");
}



int main() {
    int expo, data, count;
    int i;
    struct node* poly1 = NULL;
    struct node* poly2 = NULL;
    struct node* result;

    // Insert terms into polynomial 1
    printf("\nEnter number of terms in poly 1: ");
    scanf("%d", &count);
    for(i=0;i<count;i++){
	printf("\nEnter element %d", i+1);
	printf("\nEnter coefficient: ");
	scanf("%d",&data);
	printf("\nEnter exponent: ");
	scanf("%d", &expo);
	insert_term(&poly1, data, expo);
    }
    //insert_term(&poly1, 5, 4);
    //insert_term(&poly1, 2, 3);
    //insert_term(&poly1, -2, 2);
    //insert_term(&poly1, 17, 0);

    // Insert terms into polynomial 2
    printf("\nEnter number of terms in poly 2: ");
    scanf("%d", &count);
    for(i=0;i<count;i++){
	printf("Enter element %d\n", i+1);
	printf("\nEnter coefficient: ");
	scanf("%d",&data);
	printf("\nEnter exponent: ");
	scanf("%d", &expo);
	insert_term(&poly2, data, expo);
    }
    //insert_term(&poly2, 15, 3);
    //insert_term(&poly2, 6, 2);
    //insert_term(&poly2, -2, 0);

    printf("Polynomial 1: ");
    display_polynomial(poly1);
    printf("Polynomial 2: ");
    display_polynomial(poly2);
    result = add_polynomials(poly1, poly2);
    printf("Result: ");
    display_polynomial(result);
    getch();
    return 0;
}
content_copyCOPY