zoukankan      html  css  js  c++  java
  • 【数据结构】1-3 多项式相加

    其实这个还是有点问题的,在偶见情况下会打印出0*x,目前无解唔。。。

    原理就是借用线性表,然后做运算直接先插入到后面。

    然后遍历一下,只要指数相同就合并在前面一个里面,后面的归0(不删除)。

    打印的时候加一个判断是否为0的条件就行了。

    下面是源码:

    #include<iostream>
    #include<cstring>
    using namespace std;
    struct Node
    {
        double coe;//系数
        int index;//指数
        Node *link;
    };
    class polynomial
    {
    private:
        Node *head, *tail;        //定义头指针,尾指针
    public:
        polynomial();//无参构造函数
        polynomial(double a[], int n[], int number);    //有参构造函数
        ~polynomial();            //析构函数
        void setup();            //求值函数
        void add(double a[], int n[], int number);
        void subtract(double a[], int n[], int number);
        void print();
    };
    polynomial::polynomial()
    {
        head = NULL;
        tail = NULL;
    }
    polynomial::polynomial(double a[], int n[], int number)
    {
        head = new Node;
        head->index = 0;
        head->coe = 0;
        tail = head;
        for (int i = 0; i < number; i++)
        {
            Node *p = new Node;
            p->coe = a[i];            //存储系数
            p->index = n[i];        //存储指数
            p->link = NULL;
            tail->link = p;
            tail = p;
        }
        setup();
    }
    polynomial::~polynomial()
    {
    
        if (head != NULL)
        {
            head = tail = NULL;
        }
    }
    void polynomial::add(double a[], int n[], int number)
    {
        for (int i = 0; i < number; i++)
        {
            Node *add = new Node;
            add->coe = a[i];
            add->index = n[i];
            tail->link = add;
            tail = add;
        }
        tail->link = NULL;
        setup();
    }
    void polynomial::subtract(double a[], int n[], int number)
    {
        for (int i = 0; i < number; i++)
        {
            Node *add = new Node;
            add->coe = -a[i];
            add->index = n[i];
            tail->link = add;
            tail = add;
        }
        tail->link = NULL;
        setup();
    }
    void polynomial::setup()
    {
        Node *m = head->link;
        Node *p;
        while (m != NULL)
        {
            p = m->link;
            while (p != NULL)
            {
                if (m->index == p->index)
                {
                    m->coe = m->coe + p->coe;
                    p->coe = 0;
                }
                p = p->link;
            }
            m = m->link;
        }
        tail->link = NULL;
    }
    void polynomial::print()
    {
        if (head == NULL)
        {
            cout << "错误,无数据!" << endl;
            exit(1);
        }
        Node *p = head;
        while (p != NULL)
        {
            p = p->link;
            if (p == NULL)
            {
                cout << endl;
                break;
            }
            if (p->coe == 0)
            {
                continue;
            }
            else
            {
                cout << p->coe << "x^" << p->index;
                if (p->link!= NULL&&p->link->coe>0)
                {
                    cout << "+";
                }
                
            }
            
            
        }
    }
    int main()
    {
        int number;
        int *index;
        double *coe;
        cout << "欢迎使用多项式计算器,请输入多项式的元素个数:" << endl;
        cin >> number;
        index = new int[number];
        coe = new double[number];
        for (int i = 0; i < number; i++)
        {
            cout << "请输入第" << i + 1 << "个多项式的系数: ";
            cin >>coe[i];
            cout << "请输入第" << i + 1 << "个多项式的指数: ";
            cin >> index[i];
        }
        polynomial test1(coe, index, number);
        test1.print();
        cout << "请输入相加的多项式的元素个数:" << endl;
        cin >> number;
        delete []index;
        delete []coe;
        index = new int[number];
        coe = new double[number];
        for (int i = 0; i < number; i++)
        {
            cout << "请输入第" << i + 1 << "个多项式的系数: ";
            cin >> coe[i];
            cout << "请输入第" << i + 1 << "个多项式的指数: ";
            cin >> index[i];
        }
        test1.add(coe, index, number);
        cout << "相加成功!" << endl;
        test1.print();
        cout << "请输入相减的多项式的元素个数:" << endl;
        cin >> number;
        delete[]index;
        delete[]coe;
        index = new int[number];
        coe = new double[number];
        for (int i = 0; i < number; i++)
        {
            cout << "请输入第" << i + 1 << "个多项式的系数: ";
            cin >> coe[i];
            cout << "请输入第" << i + 1 << "个多项式的指数: ";
            cin >> index[i];
        }
        test1.subtract(coe, index, number);
        cout << "相减成功!" << endl;
        test1.print();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    姐姐的vue(1)
    LeetCode 64. Minimum Path Sum 20170515
    LeetCode 56. 56. Merge Intervals 20170508
    LeetCode 26. Remove Duplicates from Sorted Array
    LeetCode 24. Swap Nodes in Pairs 20170424
    LeetCode 19. Remove Nth Node From End of List 20170417
    LeetCode No.9 Palindrome Number 20170410
    LeetCode No.8. String to Integer (atoi) 2017/4/10(补上一周)
    LeetCode No.7 Reverse Integer 2017/3/27
    LeetCode No.4 Median of Two Sorted Arrays 20170319
  • 原文地址:https://www.cnblogs.com/robotpaul/p/9978035.html
Copyright © 2011-2022 走看看