用链表计算两个多项式的和
2017-11-12 19:57
441 查看
看严蔚敏的《数据结构》的书,第二章讲链表的时候介绍可以用链表来保存多项式的每一项(系数和指数),然后计算两个多项式的加减乘除,于是用C语言实现了其中的多项式加法的操作,这里把程序介绍一下。 首先是定义数据结构保存多项式的一项。 typedef struct _PolyItem { float Coef; //系数 int Expn; //指数 struct _PolyItem* pNext; //下一个节点指针 }PolyItem,*pPolyItem; 接下来是主程序: PolyItem poly1st;// 第一个多项式的头 PolyItem poly2st;// 第二个多项式的头
// 通知用户输入第一个和第二个多项式 InitPolyNomial(&poly1st); InitPolyNomial(&poly2st);
// 计算多项式加法 printf("开始计算多项式的和\n");
pPolyItem pTemp=NULL; PolyItem result; pTemp=&result; pPolyItem p1st=poly1st.pNext; pPolyItem p2st=poly2st.pNext;
// 开始计算和 while(p1st!=NULL && p2st!=NULL) { // 合并同类项 if(p1st->Expn==p2st->Expn) { float fltResult=p1st->Coef+p2st->Coef; if(fltResult!=0) { pTemp->pNext=CreateNode(fltResult,p1st->Expn); pTemp=pTemp->pNext; }
p1st=p1st->pNext; p2st=p2st->pNext; } else { // 指数不同的项按照指数从小到大排列 if(p1st->Expn>p2st->Expn) { pTemp->pNext=CreateNode(p2st->Coef,p2st->Expn); pTemp=pTemp->pNext; p2st=p2st->pNext; } else { pTemp->pNext=CreateNode(p1st->Coef,p1st->Expn); pTemp=pTemp->pNext; p1st=p1st->pNext; } } }
// 如果其中某一个多项式还有多余的项,则添加到结果的尾部 if(p1st!=NULL) { while(p1st!=NULL) { pTemp->pNext=CreateNode(p1st->Coef,p1st->Expn); pTemp=pTemp->pNext; p1st=p1st->pNext; } }
if(p2st!=NULL) { while(p2st!=NULL) { pTemp->pNext=CreateNode(p2st->Coef,p2st->Expn); pTemp=pTemp->pNext; p2st=p2st->pNext; } } 下面计算多项式0.25+2x+3x^3和10+1.5x+3x^2+4x^4的值: 首先是输入数据:
最后是计算结果
// 通知用户输入第一个和第二个多项式 InitPolyNomial(&poly1st); InitPolyNomial(&poly2st);
// 计算多项式加法 printf("开始计算多项式的和\n");
pPolyItem pTemp=NULL; PolyItem result; pTemp=&result; pPolyItem p1st=poly1st.pNext; pPolyItem p2st=poly2st.pNext;
// 开始计算和 while(p1st!=NULL && p2st!=NULL) { // 合并同类项 if(p1st->Expn==p2st->Expn) { float fltResult=p1st->Coef+p2st->Coef; if(fltResult!=0) { pTemp->pNext=CreateNode(fltResult,p1st->Expn); pTemp=pTemp->pNext; }
p1st=p1st->pNext; p2st=p2st->pNext; } else { // 指数不同的项按照指数从小到大排列 if(p1st->Expn>p2st->Expn) { pTemp->pNext=CreateNode(p2st->Coef,p2st->Expn); pTemp=pTemp->pNext; p2st=p2st->pNext; } else { pTemp->pNext=CreateNode(p1st->Coef,p1st->Expn); pTemp=pTemp->pNext; p1st=p1st->pNext; } } }
// 如果其中某一个多项式还有多余的项,则添加到结果的尾部 if(p1st!=NULL) { while(p1st!=NULL) { pTemp->pNext=CreateNode(p1st->Coef,p1st->Expn); pTemp=pTemp->pNext; p1st=p1st->pNext; } }
if(p2st!=NULL) { while(p2st!=NULL) { pTemp->pNext=CreateNode(p2st->Coef,p2st->Expn); pTemp=pTemp->pNext; p2st=p2st->pNext; } } 下面计算多项式0.25+2x+3x^3和10+1.5x+3x^2+4x^4的值: 首先是输入数据:
最后是计算结果
相关文章推荐
- 两个链表相交,计算相交点
- PAT程序设计考题——甲级1009(计算两个多项式相乘的积)
- 计算两个一元多项式的乘积
- 【32】计算两个链表的公共长度
- c语言单链表实现多项式计算
- LeetCode 445. Add Two Numbers II--两个链表均按照由尾部到头部计算两个结点数值之和,保持进位
- 使用链表计算两个大整数的和
- 利用链表计算多项式的相加
- 两个多项式相加的程序(链表)
- 使用链表实现两个多项式相加和相乘
- 线性表的应用——求解两个多项式相加问题描述(链表求解)
- nullnull计算两个字符串链表中的共同数据项,需要考虑重复选项的情况
- 链表计算多项式的和,乘积
- 链表在计算多项式上的应用(1)
- 数据结构之线性结构-链表的应用(求两个一元多项式之和)
- 合并两个单链表,其中包括尾插法建表、计算单链表长度、输出单链表,给出完整代码
- 两个一元多项式相加(链表 || 顺序表实现)
- 链表之多项式计算相关算法
- 利用链表计算多项式的相加
- 链表之多项式计算相关算法