数据结构课后习题 实现多项式的加法 c语言版
来源:互联网 发布:知乎武林外传细思极恐 编辑:程序博客网 时间:2024/04/29 12:09
使用单链表实现一元多项式的存储。
加法:
对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不等于0,则构成多项式中的一项;对于两个一元多项式中所有指数不相同的项,则将此节点添加到多项式链表中去。
减法:
先将B多项式链表的数据域取反 ,然后再进行加法运算。
乘法:
将A多项式中的某一项去乘B多项式中的每一项,A多项式中的每一项重复如此,系数加至合适指数的系数上。
只写了多项式的建立和加法,减法和乘除也只是在上面的步骤上对指数和系数进行操作!
输出是先系数后指数!
#include"stdio.h"#include"stdlib.h"typedef struct PolyNode *Polynomial;/*定义结点*/struct PolyNode/*建立节点,coef为系数,expon为指数*/{ int coef; int expon; Polynomial link;}; Polynomial ReadPoly();/读取链表,实际上是建立链表/void PrintPoly(Polynomial P);/*打印链表*/Polynomial Mult(Polynomial P1,Polynomial P2);/*相加*/void Attach(int c,int e,Polynomial *prear);/*将节点链到PP链上作为输出(实际上就是建立链)*/int main()/*主程序*/{ Polynomial P1,P2,PP,PS; P1 = ReadPoly(); P2 = ReadPoly(); PP = Mult(P1,P2); PrintPoly(PP);}Polynomial ReadPoly(){ int N,c,e; Polynomial P,t,rear; scanf("%d",&N); P = (Polynomial)malloc(sizeof(struct PolyNode)); P->link=NULL; rear=P; while(N--) { scanf("%d %d",&c,&e); Attach(c,e,&rear);/*链到链表上*/ } t=P;P=P->link;free(t); return P; }void Attach(int c,int e,Polynomial *prear){ Polynomial P; P = (Polynomial)malloc(sizeof(struct PolyNode)); P->coef = c; P->expon = e; P->link =NULL; (*prear)->link =P; *prear=P;}Polynomial Mult(Polynomial P1,Polynomial P2)/*求和*/{ Polynomial t1,t2,rear,P,q; t1=P1;t2=P2; P =(Polynomial)malloc(sizeof(struct PolyNode)); P->link = NULL; rear = P; while(t1&&t2)/*进行比较将节点链到链表上*/ { if(t1->expon == t2->expon)/*比较指数,求出对应的节点系数*/ { if(t1->coef+t2->coef!=0) Attach(t1->coef+t2->coef,(t1->expon+t2->expon)/2,&rear); t2=t2->link;t1=t1->link; } else if(t1->expon>t2->expon) { Attach(t2->coef,t2->expon,&rear); t2=t2->link; } else { Attach(t1->coef,t1->expon,&rear); t1=t1->link; } } while(t1)/*如果有剩下将剩下的链补上*/ { Attach(t1->coef,t1->expon,&rear); t1=t1->link; } while(t2) { Attach(t2->coef,t2->expon,&rear); t2=t2->link; } rear->link=NULL; q=P; P=P->link; free(q);/*将我们之前申请的头节点释放掉*/ return P;}void PrintPoly(Polynomial P)/*打印相应的链,得到结果*/{ int flag = 0; if(!P) { printf("0 0\n");return; } while(P) { if(!flag) flag = 1; else printf(" "); printf("%d %d",P->coef,P->expon); P=P->link; } printf("\n");}
0 0
- 数据结构课后习题 实现多项式的加法 c语言版
- 数据结构(C语言版)课后习题1.3
- 数据结构(C语言版)课后习题1.4
- 数据结构(C语言版)课后习题2.1
- 数据结构(C语言版)课后习题1.2霍纳规则
- 数据结构课后习题 马踏棋盘 c语言版
- 数据结构习题-一元多项式的加法和乘法
- 【c++版数据结构】之用带头节点的单链表实现一元多项式(C语言版)
- 数据结构(C语言版 第2版)课后习题答案 严蔚敏 等 编著
- 多项式加法的实现
- 数据结构C语言版:一元多项式相乘
- 【数据结构_链表_List_1040】一元多项式加法运算的实现
- 数据结构 P42-43 算法实现 多项式的建立及加法
- 【数据结构】C++链表实现一元多项式的加法
- 清华大学出版社 数据结构(C语言版)的实现
- 数据结构C语言版单链表的实现
- 数据结构 二叉树的实现 c语言版
- 数据结构C语言版--单链表的基本功能实现
- 字符串以单词为单位进行反转,并且必须保留原有分隔符及其个数
- happens-before先行发生原则
- 玲珑杯 1003 Spoon Devil's Diamond Mine
- React Native填坑之旅--Button篇
- utf-8,unicode,gbk编码的来源和区别
- 数据结构课后习题 实现多项式的加法 c语言版
- apt-get 安装 node 和 nvm 安装 node 的区别
- 简单的深度优先遍历和广度优先遍历
- GZ的升级版DVD
- java面向对象——继承--初识继承
- GitLab环境搭建与项目导入
- Linux进程状态
- Spark MLlib学习笔记之二——Spark Mllib矩阵向量
- 17