《数据结构学习与实验指导》3-4:一元多项式的乘法与加法运算

来源:互联网 发布:全民奇迹服务端源码 编辑:程序博客网 时间:2024/06/05 20:35

实验内容:分别求两个一元多项式的乘积与和。
输入说明:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数。数字间以空格分隔。
输出说明:输出分2行,分别以指数递降方式输出乘积多项式与和多项式的系数和指数。数字间以空格分隔,但结尾不能有多余空格。
测试用例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1 |
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
18 2 -6 1 5 20 -4 4 -5 2 9 1 -20
2 1 2 1 0
2 1 2 -1 0 |
1 4 -1 0
2 2
2 -1000 1000 1000 0
2 1000 1000 -1000 0 |
-1000000 2000 2000000 1000 -1000000 0
0 0
0
1 199 1000 |
0 0
999 1000

#include <stdio.h>#include <stdlib.h>typedef struct Node {    int cn;    int en;    struct Node *next;} *PNode, *PLink;PLink init();void add(PLink link, int cn, int en);void insert(PLink link, int cn, int en);void release(PLink link);void print(PLink link);void plus(PLink link1, PLink link2);PLink mutiply(PLink link1, PLink link2);int main() {    int N;    int c, e;    scanf("%d", &N);    PLink link1 = init();    for (int i = 0; i < N; i++) {        scanf("%d %d", &c, &e);        add(link1, c, e);    }    insert(link1, 0, 0);    scanf("%d", &N);    PLink link2 = init();    for (int i = 0; i < N; i++) {        scanf("%d %d", &c, &e);        add(link2, c, e);    }    insert(link2, 0, 0);    PLink link4 = mutiply(link1, link2);    print(link4);    plus(link1, link2);    print(link2);    release(link1);    release(link2);    release(link4);    return 0;}PLink init() {    PNode Node_3_4 = (PNode) malloc(sizeof(PNode));    Node->next = NULL;    return Node;}void add(PLink link, int cn, int en) {    PNode node = (PNode) malloc(sizeof(PNode));    node->cn = cn;    node->en = en;    node->next = NULL;    PNode p = link;    while (p->next != NULL) {        p = p->next;    }    p->next = node;}void insert(PLink link, int cn, int en) {    PNode node = (PNode) malloc(sizeof(PNode));    node->cn = cn;    node->en = en;    node->next = NULL;    PNode pp = link;    PNode p = link->next;    while (p != NULL) {        if (p->en > en) {            pp = pp->next;            p = p->next;        } else if (p->en < en) {            node->next = p;            pp->next = node;            return;        } else {            p->cn += cn;            return;        }    }    pp->next = node;}void release(PLink link) {    PNode p = link;    while (p->next != NULL) {        PNode pp = p;        p = p->next;        free(pp);    }}void print(PLink link) {    PNode p = link;    if (p->next != NULL) {        p = p->next;        printf("%d", p->cn);        if (p->cn != 0) {            printf(" %d", p->en);        } else {            printf(" 0");        }    }    while (p->next != NULL) {        p = p->next;        if (p->cn != 0) {            printf(" %d %d", p->cn, p->en);        }    }    printf("\n");}void plus(PLink link1, PLink link2) {    PNode p = link1;    while (p->next != NULL) {        p = p->next;        insert(link2, p->cn, p->en);    }}PLink mutiply(PLink link1, PLink link2) {    PLink link3 = init();    PNode p1 = link1->next;    while (p1 != NULL) {        PNode p2 = link2->next;        while (p2 != NULL) {            int c = p1->cn * p2->cn;            int e = p1->en + p2->en;            insert(link3, c, e);            p2 = p2->next;        }        p1 = p1->next;    }    return link3;}
阅读全文
0 0
原创粉丝点击