存储多项式的项数n,系数a,指数index
顺序存储结构:数组元素表示系数,下标表示指数
顺序结构存储:结构数组,指数排序,节省空间
链式存储结构:链表

多项式的表示:仅表示非0项
已知项数可用动态数组,这里使用了链表类
0系数不保留,0指数保留;

求值分别用了直接带入和秦九韶算法,并输出两种求值方式所用的时间

#include <iostream>
#include <cmath>
#include <time.h>
using namespace std;
clock_t start,stop;
double duration;//单位秒class poly
{public:int a;int index;poly *next;//同类型
};class onePoly:public poly
{poly *head,*tail;int x;
public:onePoly(){head = tail = NULL;}onePoly(int s);~onePoly(){}bool isEmpty(){return x==0;}int sizePloy(){return x;}void dispPoly();void derivation();int accum1(int x);int accum2(int x);friend void Attach(int a,int x,onePoly *&r);friend onePoly * operator+(const onePoly&a, const onePoly&b);//友元friend onePoly * operator*(const onePoly&a, const onePoly&b);//友元};int onePoly::accum1(int k)
{poly *p = head;if (!p)return 0;int sum = 0;while (p){sum += (p->a * pow(k, p->index));//精度减少!p = p->next;}return sum;
}int onePoly::accum2(int k)
{poly *p = head;if (!p)return 0;int sum = head->a;int t = head->index;while (t){if (p->next && p->next->index == t-1){sum = p->next->a + k*sum;p = p->next;t--;}else{sum = 0 + sum*k;t--;}}return sum;
}void onePoly::derivation()
{poly *p = head,*pre = NULL;if (!p)return ;while (p){if (p->index == 0)//删除结点,肯定是最后一个结点,tail{if (pre == NULL){head = p->next;delete p;p = head;}else{pre->next = p->next;delete p;p = pre->next;}x--;return ;}else{p->a = p->a * p->index;p->index--;}pre = p;p = p->next;}
}void Attach(int a,int x,onePoly *&r)
{poly *p;p = new poly();p->a = a;p->index = x;if (p->a == 0){return ;}r->x++;r->tail->next = p;p->next = NULL;r->tail = p;
}
onePoly * operator+(const onePoly&a, const onePoly&b)//重载为全局函数
{int sum;poly *p1 = a.head,*p2 = b.head;onePoly *rear = nullptr;rear = new onePoly();rear->x = 0;if ( !p1 && !p2)return rear;poly *temp;rear->head = new poly();//生成头结点,方便操作rear->tail = rear->head;while (p1 && p2){if (p1->index == p2->index){sum = p1->a + p2->a;Attach(sum, p1->index,rear);p1 = p1->next;p2 = p2->next;}else if (p1->index > p2->index){Attach(p1->a, p1->index, rear);p1 = p1->next;}else{Attach(p2->a, p2->index, rear);p2 = p2->next;}}for (; p1; p1 = p1->next) Attach(p1->a, p1->index, rear);for (; p2; p2 = p2->next) Attach(p2->a, p2->index, rear);temp = rear->head;rear->head = rear->head->next;delete temp;return rear;
}onePoly * operator*(const onePoly&a, const onePoly&b)
{int xi,in;poly *p1 = a.head,*p2 = b.head;onePoly *rear = NULL;//引用不能为空rear = new onePoly();if ( !p1 || !p2)return rear;rear->x = 0;poly *temp,*t;rear->head = new poly();//生成头结点,方便操作rear->tail = rear->head;while (p2){Attach(p1->a * p2->a, p1->index + p2->index, rear);p2 = p2->next;}p1 = p1->next;while (p1){p2 = b.head;temp = rear->head;while (p2){xi = p1->a * p2->a;in = p1->index + p2->index;while (temp->next && temp->next->index > in)//插入位置temp = temp->next;if (temp->next && temp->next->index == in)//包括最后一个{if (temp->next->a + xi)temp->next->a += xi;else{t = temp->next;temp->next = t->next;delete t;}}else{t = new poly();t->a = xi;t->index = in;t->next = temp->next;temp->next = t;temp = temp->next;}p2 = p2->next;}p1 = p1->next;}temp = rear->head;rear->head = rear->head->next;delete temp;return rear;
}onePoly::onePoly(int s)
{x = s;head = tail = NULL;int xi,in;poly *p;for (int i = 0; i < s; i++){cin >> xi >> in;if (xi == 0){x--;continue;}p = new poly();p->a = xi;p->index = in;if (head == NULL) {head = p;p->next = NULL;}else{tail->next = p;p->next = NULL;}tail = p;}
}void onePoly::dispPoly()
{cout << "f(x)=";poly *p = head;int flag = 1;if (!p){cout << "0" << endl;return ;}while (p != NULL){if (p->a > 0)cout << "+";if (p->a != 0){flag = 0;cout << p->a << "x^" << p->index;}p = p->next;}if (flag)cout << "0" << endl;cout << endl;
}int main()
{int m,n;cin >> m;onePoly p1(m);cin >> n;onePoly p2(n);p1.dispPoly();p2.dispPoly();onePoly *p4 = p1 * p2;p4->dispPoly();onePoly *p3 = p1 + p2;p3->dispPoly();p3->derivation();p3->dispPoly();start = clock();cout << p2.accum1(2) << endl;//cout << p2.accum2(2) << endl;stop = clock();duration = ((double)(stop-start))/CLK_TCK;cout << duration << endl;return 0;}

链表实现一元多项式的加法、乘法、求导,求值相关推荐

  1. python numpy 多项式函数 求导求根

    python numpy 多项式函数 求导求根 """求出多项式的 导函数与根 """import numpy as np import m ...

  2. MATLAB—离散一元、二元、多元函数求导求梯度(二维、三维、多维空间)(diff和gradient)

    (离散)一元函数求导-二维 已知同维度的x和y序列,则可使用diff(y)./diff(x)来估算.设x为n维向量,Dx=diff(x),计算向量x的向前差分,DX(i)=X(i+1)-X(i),0& ...

  3. 【C语言X数据结构】用静态链表实现的多项式计算器,加减乘除求导求值,输入输出样样在行!(完整代码+注释)

    目录 实验要求 完整代码 逻辑设计 哈喽各位好,我是李博轩,一个刚转到计算机的大二学生.这个标题是随手打上去的,感觉还蛮顺口,就这样了. 这个学期在学[数据结构与算法],而这是我面对的第一个实验题.因 ...

  4. 用计算机求导,求导公式?

    .公式法 例如∫x^ndx=x^(n+1)/(n+1)+C ∫dx/x=lnx+C ∫cosxdx=sinx 等不定积分公式都应牢记,对于基本函数可直接求出原函数. 2.换元法 对于∫f[g(x)]d ...

  5. 矩阵,向量求导-求导布局,表格查找

    文章目录 矩阵,向量求导(Matrix calculus) 0.约定 1.目标 2.完整的求导表格 完整表格 1.布局说明 分子布局(Numerator-layout) 分母布局(Denominato ...

  6. matlab中函数求导 求反,关于一个函数的反函数求导问题,一个超复杂函数……急啊!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我在做课设,现在时间很紧了-- 关于一个函数的反函数求导问题,用matlab弄出来的超复杂函数-- 函数的大概形式是:L_bc=f(k); 我想求的是:k ...

  7. matlabB样条曲线求导求曲率

    原文:http://www.matlabsky.com/thread-665-1-1.html function result = BspCurv( C,U,t,k) % %CURVATURE B样条 ...

  8. 向量和矩阵求导(运用迹性质求导)

    文章目录 矩阵对标量求导 标量对矩阵求导 向量对向量求导(雅可比矩阵) 向量求导的链式法则 矩阵迹 实值函数对向量求导 参考资料 1. 机器学习中的矩阵.向量求导 矩阵对标量求导 求导结果与函数(矩阵 ...

  9. TensorFlow基础5-可训练变量和自动求导机制

    记录TensorFlow听课笔记 文章目录 记录TensorFlow听课笔记 一,可训练变量 二,TensorFlow的自动求导 一,可训练变量 Variable对象 : 对Tensor对象的进一步封 ...

  10. 常见激活函数及其求导相关知识

    文章目录 Sigmoid函数 Sigmoid函数介绍 Sigmoid函数求导 tanh 函数 tanh 函数介绍 tanh 函数求导 Relu函数 Relu函数介绍 Relu函数求导 Softmax函 ...

最新文章

  1. Jzoj3625 旅行(travel)
  2. 数学建模学习笔记——相关性分析
  3. 2017/Province_Java_B/2、纸牌三角形
  4. js,需要更多源字符
  5. Android L(5.0)源码之图形与图像处理之动画——Frame、Tween、属性动画、SurfaceView...
  6. Leetcode--322. 零钱兑换
  7. 深度学习的实用层面 —— 1.4 正则化
  8. 【英语】秋风吹---9月英语
  9. 【数据结构笔记07】不带头结点链表实现多项式相加、相乘
  10. nslookup测试网络命令
  11. 微软应用商店显示服务器错误代码,微软应用商店打不开 显示错误代码: 0x80131500...
  12. 紫猫数据库使用 (二)
  13. ppt插入 html,PPT中嵌入网页的方法:使用webbrowser控件
  14. 【SequoiaDB|巨杉数据库】HTAP混合负载Ⅰ
  15. c语言个人所得税的打印思路,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
  16. 筛法求素数(C语言/C++)
  17. 整理全网文档管理平台,持续跟更新
  18. SpringBoot 事务管理
  19. 再没时间 创业时也要读下这十本经典书
  20. Falcom:英雄传说系列

热门文章

  1. 从“老公”的称呼来历,看男人地位的变迁
  2. pip install scikit-image安装失败,而且通过transform.rescale(img,0.6)时,原图像的通道数3变为2了,怎么解决?
  3. 单片机开发怎么把杜邦线弄整齐?
  4. android模拟器安装frida
  5. c语言判断闰年并输出该月天数,C语言宏定义实现闰年判断并输出指定月的天数...
  6. 【AAAA级LED护眼学习台灯照明方案】PWM内部转模拟,调光深度1%,无频闪顾虑,低亮无抖动LED恒流驱动芯片FP7102/FP7103/FP7208/FP7209
  7. Linux表示什么、如何使用、在哪里使用、解释、简单操作
  8. ADI超声解决方案 和系统成像设计
  9. 国内各大安卓应用市场的不同ASO优化点
  10. 点云配准1-ICP算法 原理代码实现