📌  相关文章
📜  使用链表添加两个多项式的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:36:42.204000             🧑  作者: Mango

使用链表添加两个多项式的 C++ 程序

在代数中,多项式是由常数、变量和指数的和组成的表达式。在此处,我们将使用链表来表示这些多项式,并编写程序来添加两个多项式。

链表表示多项式

我们可以使用类来表示一个多项式中的项。每个项都应包含系数和指数。一个多项式是由多个这些项组成的。

我们可以使用一个链表来存储多项式。链表中的每个节点都包含一个项和一个指向下一个节点的指针。

下面是一个项的定义:

class Term {
public:
    int coef;
    int exp;
    Term* next;
};

这是一个链表节点的定义:

class Node {
public:
    Term term;
    Node* next;
};

我们需要使用一个指向头节点的指针来表示整个多项式。下面是一个多项式的定义:

class Polynomial {
public:
    Node* head;
};
添加两个多项式

要将两个多项式相加,我们需要将它们的项相加,然后将结果添加到新的多项式中。如果两个项具有相同的指数,则它们的系数相加。否则,它们应该被视为不同的项。

下面是一个将两个多项式相加的代码:

Polynomial add(Polynomial p1, Polynomial p2) {
    Polynomial res;
    Node* p = p1.head;
    Node* q = p2.head;
    Node* r = res.head = new Node;
    while (p && q) {
        if (p->term.exp == q->term.exp) {
            // 相同指数的项系数相加
            int sum = p->term.coef + q->term.coef;
            if (sum != 0) {
                r = r->next = new Node;
                r->term.coef = sum;
                r->term.exp = p->term.exp;
            }
            p = p->next;
            q = q->next;
        } else if (p->term.exp > q->term.exp) {
            // 将 p 中的项添加到 res 中
            r = r->next = new Node;
            *r = *p;
            p = p->next;
        } else {
            // 将 q 中的项添加到 res 中
            r = r->next = new Node;
            *r = *q;
            q = q->next;
        }
    }
    // 将 p 或 q 中剩余的项添加到 res 中
    r->next = p ? p : q;
    return res;
}
示例

下面是一个示例程序,演示了如何使用上述代码将两个多项式相加:

#include <iostream>

using namespace std;

Polynomial read_poly() {
    Polynomial P;
    Node* p = P.head = new Node;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        p = p->next = new Node;
        cin >> p->term.coef >> p->term.exp;
    }
    return P;
}

void print_poly(Polynomial P) {
    for (Node* p = P.head->next; p; p = p->next) {
        cout << p->term.coef << "x^" << p->term.exp;
        if (p->next) {
            cout << " + ";
        }
    }
    cout << endl;
}

int main() {
    Polynomial P1 = read_poly();
    Polynomial P2 = read_poly();
    Polynomial P3 = add(P1, P2);
    print_poly(P3);
    return 0;
}

在此示例中,read_poly 函数用于从标准输入读取一个多项式,并返回一个 Polynomial 对象。print_poly 函数用于将一个多项式打印到标准输出中。

使用这个程序,您可以从标准输入中读取两个多项式,并将它们相加。程序将打印结果多项式到标准输出中。

总结

使用链表来表示多项式是一种有效的方法。链表可以快速添加和删除多项式中的项。通过使用适当的数据结构和算法,我们可以轻松地将两个多项式相加。这是一种很好的练习,可以帮助您熟悉链表和多项式的概念,并提高您的编程技能。