zoukankan      html  css  js  c++  java
  • 多项式加法运算 使用链表实现

    /*
    多项式加法运算
    使用链表实现
    */
    #include <iostream>
    using namespace std;
    
    //使用不带头结点的单向链表,按照指数递减的顺序排列
    typedef struct PolyNode
    {
        int coef;    //系数
        int expon;    //指数
        PolyNode *link;    //指向下一个节点的指针
    }*polynomial, npolynomial;
    
    polynomial PolyAdd(polynomial p1, polynomial p2);
    int Compare(int p1e, int p2e);
    void Attach(int coef, int expon, polynomial &pRear);
    polynomial CreatePoly(int size);
    
    int main()
    {
        polynomial p1, p2, sump;
        p1 = CreatePoly(5);
        p2 = CreatePoly(8);
        
        sump = PolyAdd(p1, p2);
    
        cout << "p1:" << endl;
        while (p1)
        {
            cout << p1->coef << "x^" << p1->expon << '+';
            p1 = p1->link;
        }
        cout << endl;
    
        cout << "p2:" << endl;
        while (p2)
        {
            cout << p2->coef << "x^" << p2->expon << '+';
            p2 = p2->link;
        }
        cout << endl;
    
        cout << "sump:" << endl;
        while ( sump )
        {
            cout << sump->coef << "x^" << sump->expon << '+';
            sump = sump->link;
        }
        cout << endl;
        return 0;
    }
    
    polynomial PolyAdd(polynomial p1, polynomial p2)
    {
        polynomial front, rear, temp;
        int sum;
        rear = new npolynomial;    //为方便表头插入,先产生一个临时空结点作为结果多项式链表头
        front = rear;    //由front记录结果多项式链表头结点
        while ( p1 && p2 )    //当两个多项式都有非零项待处理时
        {
            switch (Compare(p1->expon, p2->expon))
            {
            case 1:    //p1中的数据项指数较大
                Attach(p1->coef, p1->expon, rear);
                p1 = p1->link;
                break;
            case -1:    //p2中的数据项指数较大
                Attach(p2->coef, p2->expon, rear);
                p2 = p2->link;
                break;
            case 0:    //两数据项指数相等
                sum = p1->coef + p2->coef;
                if (sum)    //判断系数和是否为0
                {
                    Attach(sum, p1->expon, rear);
                }
                p1 = p1->link;
                p2 = p2->link;
                break;
            }
        }
        //将未处理完的另一个多项式的所有节点依次复制到结果多项式去
        while ( p1 )
        {
            Attach(p1->coef, p1->expon, rear);
            p1 = p1->link;
        }
        while (p2)
        {
            Attach(p2->coef, p2->expon, rear);
            p2 = p2->link;
        }
        rear->link = NULL;
        temp = front;
        front = front->link;    //使front指向结果多项式第一个非零项目
        delete temp;
        return front;
    }
    
    int Compare(int p1e, int p2e)
    {
        if ( p1e > p2e )
        {
            return 1;
        }
        else if (p1e < p2e)
        {
            return -1;
        }
        else
        {
            return 0;
        }
    }
    
    void Attach(int coef, int expon, polynomial &pRear)
    {
        //由于本函数需要改变当前结果表达式尾项指针的值;
        //因此函数传递进来的是结点指针的地址,p指向尾项
        polynomial p;
    
        p = new npolynomial;
        p->coef = coef;
        p->expon = expon;
        //将P指向的新结点插入到当前结果表达式尾项的后面
        pRear->link = p;
        pRear = p;
    }
    
    polynomial CreatePoly(int size)    //降序建立多项式
    {
        polynomial head, p;
        head = NULL;
        p = NULL;
        for (int i = 0; i < size; i++)
        {
            p = new npolynomial;
            p->link = NULL;
            p->coef = i;
            p->expon = i;
            if ( head != NULL )    //在链表头部插入
            {
                p->link = head;
                head = p;
            }
            else
            {
                head = p;
            }
        }
        return head;
    }
  • 相关阅读:
    Java Program to Calculate Standard Deviation
    Basic JavaScript: Counting Cards
    MacBook Pro jdk Installation、Update、Delete
    How to Download and Install Oracle JAVA 8 on Ubuntu 18.04/16.04 LTS
    9扩大你的词汇量:字体和颜色样式
    8添加一些样式:开始学习CSS
    7添加一个“X”到HTML:转到XHTML
    6严格的HTML:遵循标准,合乎规范
    5认识媒体:给网页添加图像
    4Web镇之旅:开始链接
  • 原文地址:https://www.cnblogs.com/liangchao/p/4275527.html
Copyright © 2011-2022 走看看