《数据结构学习与实验指导》3-4:一元多项式的乘法与加法运算
2017-06-10 23:51
190 查看
实验内容:分别求两个一元多项式的乘积与和。
输入说明:输入分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
输入说明:输入分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 4000 ); 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; }
相关文章推荐
- 02-线性结构2 一元多项式的乘法与加法运算
- 一元多项式的加法与乘法运算
- pta 一元多项式的乘法与加法运算
- PAT 一元多项式的乘法与加法运算(链表 c++版)
- 02-线性结构2 一元多项式的乘法与加法运算-中国大学MOOC-陈越、何钦铭-数据结构-2017秋
- 一元多项式的乘法与加法运算(20 分)
- pta 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算
- [PTA刷题]一元多项式的乘法与加法运算
- PAT 02-线性结构2 一元多项式的乘法与加法运算 (java)
- 5-2 一元多项式的乘法与加法运算
- pta 一元多项式的乘法与加法运算
- 5-2 一元多项式的乘法与加法运算 (20分)
- 习题3.6 一元多项式的乘法与加法运算
- 5-2 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- pta 一元多项式的乘法与加法运算
- 3.数据结构--线性表之一元多项式的加法与乘法运算