多项式相加

数据结构
Published

July 9, 2018

废话不想多说,直接上程序 o(╥﹏╥)o最近腰疼的难受。

程序

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct PolyNode {
    int coef; // coeffciant
    int expon;
    struct PolyNode *next;
} * Polynomial;

void CreateP(Polynomial P1, Polynomial P2) {
    // P1=3*x^5+4*x^4-1*x^3+2*x^1-1
    Polynomial temp = (Polynomial)malloc(sizeof(struct PolyNode));
    temp->coef = 3;
    temp->expon = 5;
    P1->next = temp;
    temp->next = (Polynomial)malloc(sizeof(struct PolyNode));
    temp = temp->next;
    temp->coef = 4;
    temp->expon = 4;
    temp->next = (Polynomial)malloc(sizeof(struct PolyNode));
    temp = temp->next;
    temp->coef = -1;
    temp->expon = 3;
    temp->next = (Polynomial)malloc(sizeof(struct PolyNode));
    temp = temp->next;
    temp->coef = 2;
    temp->expon = 1;
    temp->next = (Polynomial)malloc(sizeof(struct PolyNode));
    temp = temp->next;
    temp->coef = -1;
    temp->expon = 0;
    temp->next = NULL;
    // P2=2*x^4+1*x^3-7*x^2+1*x^1
    temp = (Polynomial)malloc(sizeof(struct PolyNode));
    temp->coef = 2;
    temp->expon = 4;
    P2->next = temp;
    temp->next = (Polynomial)malloc(sizeof(struct PolyNode));
    temp = temp->next;
    temp->coef = 1;
    temp->expon = 3;
    temp->next = (Polynomial)malloc(sizeof(struct PolyNode));
    temp = temp->next;
    temp->coef = -7;
    temp->expon = 2;
    temp->next = (Polynomial)malloc(sizeof(struct PolyNode));
    temp = temp->next;
    temp->coef = 1;
    temp->expon = 1;
    temp->next = NULL;
}

int Compare(Polynomial P1, Polynomial P2) {

    if (P1->expon > P2->expon) {
        return 1;
    }

    if (P1->expon < P2->expon) {
        return -1;
    }

    if (P1->expon == P2->expon) {
        return 0;
    }
}

void Attach(int Coef, int Expon, Polynomial tail) {
    Polynomial temp = (Polynomial)malloc(sizeof(struct PolyNode));
    temp->coef = Coef;
    temp->expon = Expon;
    temp->next = NULL;
    tail->next = temp;
    tail = temp;
}

Polynomial PolyAdd(Polynomial P1, Polynomial P2) {
    Polynomial front, rear, temp;
    int sum;
    rear = (Polynomial)malloc(sizeof(struct PolyNode));
    front = rear;
    while (P1->next && P2->next) {
        switch (Compare(P1->next, P2->next)) {
        case 1:
            Attach(P1->coef, P1->expon, rear);
            P1 = P1->next;
            break;
        case -1:
            Attach(P2->coef, P2->expon, rear);
            P2 = P2->next;
            break;
        case 0:
            sum = P1->coef + P2->coef;
            if (sum) {
                Attach(sum, P1->expon, rear);
            }
            P1 = P1->next;
            P2 = P2->next;
            break;
        }
    }

    for (; P1; P1 = P1->next) {
        Attach(P1->coef, P1->expon, rear);
    }
    for (; P2; P2 = P2->next) {
        Attach(P2->coef, P2->expon, rear);
    }
    rear->next=NULL;
    temp=front;
    front=front->next;
    free(temp);
    return front;
}

int main(int argc, char const *argv[]) {
    /* create the polynomial */
    Polynomial MP1 = NULL, MP2 = NULL,MPA=NULL;
    MP1 = (Polynomial)malloc(sizeof(struct PolyNode));
    MP2 = (Polynomial)malloc(sizeof(struct PolyNode));
    MPA = (Polynomial)malloc(sizeof(struct PolyNode));
    CreateP(MP1, MP2);
    MPA=PolyAdd(MP1,MP2);
    return 0;
}