多项式加减 List
vector与list与dequeue有何区别
/* 多项式加法和乘法示例 */
#include <list>
#include <iostream>
#include <cassert> using namespace std; //定义多项式的项类
class term
{
public: int coef; //多项式系数 int exp; //多项式指数 term( int c=0,int e=0):coef(c),exp(e){}
}; //定义多项式类
class PolyArith
{
private:list<term> m_poly_list_first; //存储第一个多项式 list<term> m_poly_list_second; //存储第二个多项式list<term> m_poly_list_result; //用以存储运算结果//多项式私有成员函数,用以乘法时的调用 list<term> Poly_add(list<term>& poly_list_first,list<term>& poly_list_second) { list<term> poly_list_result; //用以存储运算结果 list<term>::iterator iter_first = poly_list_first.begin(); list<term>::iterator iter_second = poly_list_second.begin();//该while循环针对两个链表迭代器都没有指到结尾的情形 while(iter_first != poly_list_first.end() && iter_second != poly_list_second.end()) {term t_temp; term t_first = (term)*iter_first; term t_second = (term)*iter_second; if(t_first.exp > t_second.exp) { poly_list_result.push_back(t_first); iter_first++; } else if(t_second.exp > t_first.exp) {poly_list_result.push_back(t_second); iter_second++; } else{t_temp.coef=t_first.coef+t_second.coef;t_temp.exp=t_first.coef; poly_list_result.push_back(t_temp); iter_first++; iter_second++; } } //该for循环针对第一个多项式的迭代器没有指到结尾 第二个指到结尾的情形 for( ;iter_first != poly_list_first.end();iter_first++)poly_list_result.push_back(*iter_first); //该for循环针对第二个多项式的迭代器没有指到结尾 第一个指到结尾的情形 for( ;iter_second != poly_list_second.end();iter_second++)poly_list_result.push_back(*iter_second); return poly_list_result;}
public://输入函数,用以输入多项式 void Poly_input() { int n; cout<<"请输入第一个多项式的项数:"<<endl; cin>>n; cout<<"按降幂输入第一个多项式的每一项的系数和指数:"<<endl;for(int i=1;i<=n;i++) {term t_temp; cout<<"请输入第"<<i <<"项系数和指数,以'enter'为界:";cout<<endl; cin>>t_temp.coef; cin>>t_temp.exp; m_poly_list_first.push_back(t_temp); } n = 0; cout<<"请输入第二个多项式的项数:"<<endl; cin>>n; cout<<"按降幂输入第二个多项式的每一项的系数和指数:";cout<<endl; for(int j=1;j<=n;j++) { term t_temp; cout<<"请输入第"<<j <<"项系数和指数,以'enter'为界:";cout<<endl;cin>>t_temp.coef; cin>>t_temp.exp; m_poly_list_second.push_back(t_temp); } }//输出函数,用以输出多项式 void Poly_output() {//用以指向输出多项式的第一个元素list<term>::iterator iter = m_poly_list_result.begin();//输出多项式的每一项 for(;iter!=m_poly_list_result.end();) { term t_temp=*iter; cout<<t_temp.coef<<"x^"<<t_temp.exp; if(++iter!=m_poly_list_result.end()) cout<<"+"; } cout<<endl; } //加法函数,其基本思想同上边的私有成员函数Poly_add()此处不带参数,多项式运算对象为私有数据成员 void Poly_add() { list<term>::iterator iter_first = m_poly_list_first.begin(); list<term>::iterator iter_second =m_poly_list_second.begin(); while(iter_first != m_poly_list_first.end()&&iter_second != m_poly_list_second.end()) { term t_temp; term t_first = (term)*iter_first; term t_second = (term)*iter_second; if(t_first.exp>t_second.exp) { m_poly_list_result.push_back(t_first); iter_first++; } else if(t_second.exp>t_first.exp) { m_poly_list_result.push_back(t_second); iter_second++; } else { t_temp.coef=t_first.coef+t_second.coef; t_temp.exp=t_first.exp;m_poly_list_result.push_back(t_temp); iter_first++; iter_second++; } } for(;iter_first != m_poly_list_first.end();iter_first++) m_poly_list_result.push_back(*iter_first); for(;iter_second != m_poly_list_second.end();iter_second++) m_poly_list_result.push_back(*iter_second); }//乘法函数,用以作多项式乘法 void Poly_multi() { list<term> poly_list_result; list<term>::iterator iter_first = m_poly_list_first.begin(); for(;iter_first!=m_poly_list_first.end();iter_first++) { list<term> poly_list_temp; //用以存储多项式的中间运算结果list<term>::iterator iter_second =m_poly_list_second.begin(); for(;iter_second!=m_poly_list_second.end(); iter_second++) { term t_temp; //用以存储项的中间运算结果 term t_first = (term)*iter_first; term t_second = (term)*iter_second;//此处实现多项式项的相乘t_temp.coef = t_first.coef*t_second.coef; //系数相乘 t_temp.exp = t_first.exp + t_second.exp; //指数相加 poly_list_temp.push_back(t_temp); }//此处调用私有成员函数Poly_add()poly_list_result =Poly_add(poly_list_temp,poly_list_result); }//将运算结果赋值给私有数据成员,用以输出 m_poly_list_result = poly_list_result;}
}; //测试函数
int main()
{ cout<<"************本程序实现多项式的加法与乘法************";cout<<endl;PolyArith poly_a; poly_a.Poly_input(); //输入多项式 poly_a.Poly_add(); //多项式加法cout<<"多项式加法的运算结果:"<<endl; poly_a.Poly_output(); //输出多项式 cout<<endl; poly_a.Poly_multi(); //多项式乘法cout<<"多项式乘法的运算结果:"<<endl; poly_a.Poly_output(); system("pause"); return 0;
}
有待修改
多项式加减 List相关推荐
- 数据结构(C语言)多项式加减
这是大二刚开始数据结构的平时作业,上次随便发了,没来得及写标题和内容.题目要求用链表来实现多项式的加减,其实就是设置一个两个指针进行遍历,在代码段里有一些注解,要是有不太清楚的地方可以在下面留言或是私 ...
- 多项式加减(数据结构乱杀+完整实验报告)
一.实验目的: 理解线性表的基本逻辑结构,完成链表及循环链表的实现 通过实验进一步理解线性表的逻辑结构和存储结构,提高使用理论知识指导解决实际问题的能力,熟练掌握链表的实际应用. 二.实验内容: 题目 ...
- 多项式全家桶——Part.1 多项式加减乘
多项式全家桶它lei了. 好吧,最近发现自己的多项式芝士严重匮乏,发现只会FFT和NTT,而且还有点生疏. 那既然没事干,那就来吃吃全家桶来补充芝士储备. 多项式 多项式是一个神奇的东东. 它长这样: ...
- c语言用链表的方式实现多项式加减,如何实现C语言单链表多项式相加的操作
#include#pragma warning(disable:4996)//兼容scanf typedef struct node { int coef; int expon; struct nod ...
- 二元多项式基本运算 选择合适的存储结构表示二元多项式,并实现基本的加减运算 要求: 1)二元多项式的输入采用如下方式进行键盘输入 (5y^2+7)x^4 + (3y^4+2y+9)x^2 + (2y
1. 本题最关键的部分就是指数和系数的读取和存储,可以把系数和指数存在一个N*4的数列中,第一列为系数,第二列为x的指数,第三列为y的指数,第四列可有可无,第四列可以存储两个指数的和,方便升幂和降幂. ...
- [MATLAB]多项式求导/加减/乘除
函数公式: 多项式的加减运算 多项式的加减运算非常简单,即相应向量相加减 多项式乘法 conv(p1,p2):多项式相乘函数.在这里,P1.P2是两个多项式系数向量 多项式除法 [Q,r]=decon ...
- MFC版链表实现稀疏多项式相加减
链表实现多项式运算(加减)MFC可视化版 题目 设计一个一元稀疏多项式简单计算器. 基本要求 (1)输入并建立两个多项式: (2)多项式a与b相加,建立和多项式c: (3)多项式a与b相减,建立差多项 ...
- 一元多项式加减乘实现c/c++
一.实验题目: 一元多项式简单的计算器 1.主要功能: (1)输入并建立多项式: (2)输出多项式: (3)两个多项式相加,建立并输出和多项式: (4)两个多项式相减,建立并输出差多项式. (5)算 ...
- 分式相乘转换成分式加减的一般性方法的简单讨论
分式相乘转换成分式加减的一般性方法的简单讨论 前言 方法讨论 例子讨论 小结 前言 在疫情期间在进行数字化核信号处理时又需要用到信号与系统中的内容,在用到拉普拉斯变换时发现当时所用的分式乘积转分式加减 ...
最新文章
- Python之父退休,C语言之父与世长辞,各大编程语言创始人现状盘点
- Puppet Host资源介绍(二十一)
- List集合2-LinkedList
- Linux常用网络命令总结
- 【转载】fullpage.js学习
- 去除面部黑色素小妙招_面部黑色素沉着怎么去除 推荐几个去黑色素的方法
- 企业实战_02_Redis基础
- NAT(NAPT)地址转换过程
- es6 属性名表达式
- SpringBoot工程不注册到Eureka上
- 计算机学习知识,如何学习计算机知识呢
- 2022-2028年中国电力载波通信行业市场行情动态及竞争战略分析报告
- 学习笔记10--自动驾驶汽车软件架构
- 补习班停了,家长“卷向”兴趣班
- GC-MS分析方法如何定性与定量?
- C/C++ 正则表达式 regex库介绍(详细版)
- 面经 - 阿里巴巴 - 视频二面
- IDDPM官方gituhb项目--模型构建
- 将单向链表按某值划分成左边小、中间相等、右边大的形式
- 新媒体大数据在线课堂第一讲《危机事件中的舆论引导》课堂笔记