数据结构与算法分析 3.7 - 多项式乘法链表实现

思路

<1>对于p(x)中的每一个因式,与q(x)中每一个因式相乘的结果,保存于另外的链表中;

<2>对于保存结果的链表排序,并去重,即去除系数相同的因式结点,但系数相加

代码

#include <list>
using namespace std;

struct Node
{
    int coefficient = 0;
    int exponent = 0;
};
bool compfn(const Node &lhs, const Node &rhs) { return lhs.exponent > rhs.exponent; }

list<Node> MultiplyPolynomial(list<Node> &polyFirst, list<Node> &polySecond)
{
    list<Node> polyProd;

    for (auto i = polyFirst.cbegin( ); i != polyFirst.cend( ); ++ i)
    {
        for (auto j = polySecond.cbegin( ); j != polySecond.cend( ); ++ j)
        {
            Node prod;
            prod.coefficient = i->coefficient * j->coefficient;
            prod.exponent = i->exponent + j->exponent;
            polyProd.push_back(prod);
        }
    }
    polyProd.sort(compfn);

    if (polyProd.size() > 1)
    {
        auto i = polyProd.begin( );
        while (i != polyProd.end())
        {
            auto j = i;

            if (++ j != polyProd.end() && i->exponent == j->exponent)
            {
                i->coefficient += j->coefficient;
                polyProd.erase(j);
            }
            else
                ++i;
        }
    }
    return polyProd;
}
时间: 2024-11-08 19:55:29

数据结构与算法分析 3.7 - 多项式乘法链表实现的相关文章

数据结构与算法分析 3.4&amp;3.5 — 链表的交与并算法

代码: #include <list> template<typename ElementType> list<ElementType> Intersect(const list<ElementType> &list_1, const list<ElementType> &list_2) { list<ElementType> result; auto leftPos = list_1.begin( ); auto r

《数据结构与算法分析》学习笔记(三)——链表ADT

今天简单学习了下链表,待后续,会附上一些简单经典的题目的解析作为学习的巩固 首先要了解链表,链表其实就是由一个个结点构成的,然后每一个结点含有一个数据域和一个指针域,数据域用来存放数据,而指针域则用来存放下一个结点的地址. 1.先给出结点的定义. typedef struct Node *PtrToNode; typedef PtrToNode List; typedef PtrToNode Position; struct Node { ElementType Element; Positio

数据结构与算法分析 - 1 - 链表ADT

1.描述:不连续存储的表,可以把链表看成一个数组,数组元素是一个个结构体,这些结构体之间通过指针连接 2.优点: 利用不连续的存储空间,提高内存使用效率 避免删除和插入的线性开销 对比数组,大小不固定,可以扩展 3. 缺点:查找效率低 4. 定义一个单向链表 1 struct Node 2 { 3 ElementType value; 4 Node *next; //next指针,指向下一个节点 5 }; 5.检测链表是否为空 对于一个单向链表,链表为空即头节点为空 1 int IsEmpty(

数据结构1:数据结构和算法分析

问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法,以递减顺序将数组排序,则第k个位置上的元素就是我们需要的元素 2.稍微好一些的做法,将k个元素读入数组并以递减顺序排序,接着将接下来的元素再逐个读入,当新元素被读到时,如果它小于数组中的第k个元素则忽略之,否则将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组,当算法终止时,位于第k个位置上

《数据结构与算法分析—C语言描述》pdf

下载地址:网盘下载 内容简介 编辑 <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括.由于<数据结构与算法分析:C语言描述(原书第2版)>选材新颖,方法实用,题例丰富,取舍得当.<数据结构与算法分析:C语言描述(原书第2版)>的目的是培养学生良好的程序设计技巧和熟练的算

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

数据结构和算法分析

转自[五月的仓颉] http://www.cnblogs.com/xrq730/p/5122436.html 数据结构 数据结构是计算机存储.组织数据的方式,是指数据相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率(这就是为什么我们要研究数据结构的原因),数据结构往往同高效的检索算法和索引技术相关. 常见的数据结构有数组.栈.队列.链表.树.散列等,这些数据结构将是本数据结构的分类中重点研究的对象. 算法分析 算法是为求解一个问题需要遵

【转】数据结构和算法分析

问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法,以递减顺序将数组排序,则第k个位置上的元素就是我们需要的元素 2.稍微好一些的做法,将k个元素读入数组并以递减顺序排序,接着将接下来的元素再逐个读入,当新元素被读到时,如果它小于数组中的第k个元素则忽略之,否则将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组,当算法终止时,位于第k个位置上

数据结构与算法分析-第3章

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-family: monospace; color: red } .done { font-family: monospace; color: green } .priority { font-fami