124 lines
2.9 KiB
C
124 lines
2.9 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
typedef struct Node {
|
|
int coefficient;
|
|
int exponent;
|
|
struct Node *next;
|
|
struct Node *prev;
|
|
} Node;
|
|
|
|
Node *createNode(int coefficient, int exponent) {
|
|
Node *newNode = (Node *)malloc(sizeof(Node));
|
|
if (newNode == NULL) {
|
|
printf("Memory allocation failed.\n");
|
|
exit(1);
|
|
}
|
|
newNode->coefficient =coefficient;
|
|
newNode->exponent = exponent;
|
|
newNode->next = NULL;
|
|
newNode->prev = NULL;
|
|
return newNode;
|
|
}
|
|
|
|
void insertEnd(Node **head, int coefficient, int exponent) {
|
|
Node *newNode = createNode(coefficient, exponent);
|
|
if (*head == NULL) {
|
|
*head = newNode;
|
|
(*head)->next = *head;
|
|
(*head)->prev = *head;
|
|
} else {
|
|
Node *last = (*head)->prev;
|
|
newNode->next = *head;
|
|
newNode->prev = last;
|
|
last->next = newNode;
|
|
(*head)->prev = newNode;
|
|
}
|
|
}
|
|
|
|
Node *addPolynomials(Node *poly1, Node *poly2) {
|
|
if (poly1 == NULL) return poly2;
|
|
if (poly2 == NULL) return poly1;
|
|
|
|
Node *result = NULL;
|
|
Node *temp1 = poly1, *temp2 = poly2;
|
|
|
|
do {
|
|
if (temp1->exponent > temp2->exponent) {
|
|
insertEnd(&result, temp1->coefficient, temp1->exponent);
|
|
temp1 = temp1->next;
|
|
} else if (temp1->exponent < temp2->exponent) {
|
|
insertEnd(&result, temp2->coefficient, temp2->exponent);
|
|
temp2 = temp2->next;
|
|
} else {
|
|
int sum = temp1->coefficient + temp2->coefficient;
|
|
if (sum != 0) {
|
|
insertEnd(&result, sum, temp1->exponent);
|
|
}
|
|
temp1 = temp1->next;
|
|
temp2 = temp2->next;
|
|
}
|
|
} while (temp1 != poly1 || temp2 != poly2);
|
|
|
|
return result;
|
|
}
|
|
|
|
void displayPolynomial(Node *head) {
|
|
if (head == NULL) {
|
|
printf("Empty polynomial.\n");
|
|
return;
|
|
}
|
|
|
|
Node *temp = head;
|
|
do {
|
|
printf("(%dx^%d) ", temp->coefficient, temp->exponent);
|
|
temp = temp->next;
|
|
if (temp != head) {
|
|
printf("+ ");
|
|
}
|
|
} while (temp != head);
|
|
printf("\n");
|
|
}
|
|
|
|
void insert(Node** poly, int coef, int exp) {
|
|
Node* temp = (Node*) malloc(sizeof(Node));
|
|
temp->coefficient = coef;
|
|
temp->exponent = exp;
|
|
temp->next = NULL;
|
|
|
|
if (*poly == NULL) { *poly = temp; return; }
|
|
|
|
Node* current = *poly;
|
|
|
|
while (current->next != NULL) current = current->next;
|
|
|
|
current->next = temp;
|
|
}
|
|
|
|
int main() {
|
|
Node *poly1 = NULL, *poly2 = NULL;
|
|
|
|
insertEnd(&poly1, 5, 3); // 5x^3
|
|
insertEnd(&poly1, 4, 1); // 4x^1
|
|
insertEnd(&poly1, 3, 0); // 3x^0
|
|
|
|
insertEnd(&poly2, 3, 2); // 3x^2
|
|
insertEnd(&poly2, 2, 1); // 2x^1
|
|
insertEnd(&poly2, 1, 0); // 1x^0
|
|
|
|
printf("First polynomial: ");
|
|
displayPolynomial(poly1);
|
|
|
|
printf("Second polynomial: ");
|
|
displayPolynomial(poly2);
|
|
|
|
Node *sum = addPolynomials(poly1, poly2);
|
|
|
|
printf("Sum of the polynomials: ");
|
|
displayPolynomial(sum);
|
|
|
|
|
|
|
|
return 0;
|
|
}
|