02-线性结构2 一元多项式的乘法与加法运算
来源:互联网 发布:淘宝怎么删除追加评论 编辑:程序博客网 时间:2024/05/01 10:38
这道习题有点难。。。自己实现了一遍,还是有小的问题存在。无法达到题目要求的格式。但是已经可以计算出正确结果了。如果有发现问题的话请大家多多指正。谢谢!!!
#include <stdio.h>#include <stdlib.h>typedef struct SNode* Polynomial;struct SNode { int coef; int exp; struct SNode* next;};int Compare(int a, int b);void Attach(int coef, int exp, Polynomial *prear);Polynomial ReadPoly();void PrintPoly(Polynomial P);Polynomial AddPoly(Polynomial P1, Polynomial P2);Polynomial MultPoly(Polynomial P1, Polynomial P2);int Compare(int a, int b){ if (a > b) return 1; else if (a < b) return -1; else return 0;}void Attach(int coef, int exp, Polynomial *prear){ Polynomial P; P = (Polynomial)malloc(sizeof(struct SNode)); P->coef = coef; P->exp = exp; P->next = NULL; /*将P插入到当前结果表达式尾项的最后面*/ (*prear)->next = P; (*prear) = P;}Polynomial ReadPoly(){ Polynomial P, rear, temp; int N; P = (Polynomial)malloc(sizeof(struct SNode)); rear = P; P->next = NULL; int coef, exp; scanf("%d", &N); while (N--) { scanf("%d %d", &coef, &exp); Attach(coef, exp, &rear); } temp = P; P = P->next; free(temp); return P;}void PrintPoly(Polynomial P){ int flag = 0; if (!P) printf("0 0\n");while (P) { if (!flag) flag = 1; else printf(" "); if (P->coef != 0) { printf("%d %d", P->coef, P->exp); P = P->next; } else P = P->next; } printf("\n");}Polynomial AddPoly(Polynomial P1, Polynomial P2){ Polynomial P, rear, temp; P = (Polynomial)malloc(sizeof(struct SNode)); P->next = NULL; rear = P; while (P1&&P2) { switch (Compare(P1->exp, P2->exp)) { case 1: Attach(P1->coef, P1->exp, &rear); P1 = P1->next; break; case -1: Attach(P2->coef, P2->exp, &rear); P2 = P2->next; break; case 0: if(P1->coef + P2->coef) Attach(P1->coef + P2->coef, P2->exp, &rear); P1 = P1->next; P2 = P2->next; break; } } for (; P1; P1=P1->next) Attach(P1->coef, P1->exp, &rear); for (; P2;P2= P2->next) Attach(P2->coef, P2->exp, &rear); rear->next = NULL; temp = P; P = P->next; free(temp); return P;}Polynomial MultPoly(Polynomial P1, Polynomial P2){ Polynomial P, rear, temp,temp1,temp2; Polynomial MultP; MultP = (Polynomial)malloc(sizeof(struct SNode)); MultP->coef = 0; MultP->exp = 0; MultP->next = NULL; P = (Polynomial)malloc(sizeof(struct SNode)); rear = P; temp2 = P; P->next = NULL; temp1 = P2; for (; P1; P1 = P1->next) { while (temp1) { Attach(P1->coef*temp1->coef, P1->exp + temp1->exp, &rear); temp1 = temp1->next; } rear->next = NULL; temp = temp2; temp2 = temp2->next; MultP = AddPoly(MultP, temp2); temp1 = P2; rear = P; temp2 = P; } return MultP;}int main(void){ Polynomial P1, P2, P,P0; P1 = ReadPoly(); P2 = ReadPoly(); P0 = MultPoly(P1, P2); PrintPoly(P0); P = AddPoly(P1, P2); PrintPoly(P);}
最后的多项式乘法函数写的风格不够简明,不懂的可以问我。但个人感觉好像比我看到的好多代码都简单些。希望大家批评指正。
0 0
- 线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算
- [PAT] 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算
- PAT 02-线性结构2 一元多项式的乘法与加法运算 (java)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- [数据结构]02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- [机器学习]信息熵、信息增益的概念
- 单件类的实现
- nginx的配置、虚拟主机、负载均衡和反向代理
- 身份证末尾校验位计算OC
- 《Android群英传》---读书笔记1
- 02-线性结构2 一元多项式的乘法与加法运算
- SVG滤镜
- HDU 2023 求平均成绩
- 内核态空间地址直接映射到用户态空间访问
- (转)NGUI控件说明(中文) UISlider
- (基础十四)LuckNumber(幸运数字)
- COM组件(MFC篇)
- 第十四周 项目1--验证算法--(4)平衡二叉树
- 字符串的编辑距离