zoukankan      html  css  js  c++  java
  • 链表实现多项式的乘法

    完整的文件见另一篇博客 https://www.cnblogs.com/fanlumaster/p/13839645.html

    Polynomial PolyMult(Polynomial P1, Polynomial P2)
    {
        Polynomial P, Rear, t1, t2, t;
        int c, e;
    
        if (!P1 || !P2) return NULL;
    
        t1 = P1;
        P = (Polynomial)malloc(sizeof(struct PolyNode));
        P->link = NULL;
        while (t1)
        {
            t2 = P2; // 每次循环之后要把 t2 归位到链表的开头
            Rear = P; // 每一次循环都要重新初始化 Rear,使 Rear 的初始值指向链表头
            while (t2)
            {
                c = t1->coef + t2->coef;
                e = t1->expon + t2->expon;
                while (Rear->link && Rear->link->expon > e) // 注意,这里和 e 作比较的是 Rear 的下一个节点中的值,这样下面的插入操作才解释得通
                    Rear = Rear->link;
                if (Rear->link && Rear->link->expon == e) {
                    if (Rear->link->coef + c)
                        Rear->link->coef += c;
                    else { // 系数相加等于 0 的情况,要把该节点删掉
                        t = Rear->link;
                        Rear->link = t->link;
                        free(t);
                    }
                } else { // 指数相加啊小于尾节点指数的情况,直接附加到结尾就成
                    t = (Polynomial)malloc(sizeof(struct PolyNode));
                    t->coef = c;
                    t->expon = e;
                    t->link = Rear->link;
                    Rear->link = t; // 直接将 t2 的值附加到
                    Rear = Rear->link;
                }
                t2 = t2->link; // 指针往后移动
            }
            t1 = t1->link;
        }
        t2 = P;
        P = P->link;
        free(t2); // 释放第一个没有存储数据得节点
    
        return P;
    }
    
  • 相关阅读:
    深度学习中常见问题
    freespace
    跑superpixel的程序
    python处理图片的一些操作
    跑edgebox
    tensorflow安装
    matlab启动
    stixel 理解
    stixel-world跑在kitti数据集
    小议中国人的乡土情结
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/13839658.html
Copyright © 2011-2022 走看看