通过链接列表添加多项式

时间:2016-06-03 23:01:19

标签: c++ linked-list nodes

我编写的代码通过结构类从用户那里获取两组多项式:

struct Term
{
    double coefficient;
    unsigned exponent;
    Term *next;
};

然后提示要求他们添加,减去或评估(向用户询问" x"的值)多项式。我在编写加减函数时遇到了麻烦。到目前为止我为add函数编写了这个,但是我不确定如何返回新的多项式。根据我对错误消息的理解,我无法使用类型为TermPtr的+ =运算符。我不确定如何解决这个问题。

TermPtr add(TermPtr p1, TermPtr p2)
{   
    TermPtr newPoly;

    if (p1 -> exponent == p2 -> exponent)
          newPoly += ((p1 -> coeff) + (p2 -> coeff));

    return newPoly;
}

我收到这些错误:

In function 'Term* add(TermPtr, TermPtr)':
36:19: error: invalid operands of types 'TermPtr {aka Term*}' and 'double' to binary 'operator+'
36:19: error:   in evaluation of 'operator+=(using TermPtr = struct Term* {aka struct Term*}, double)'

1 个答案:

答案 0 :(得分:1)

由于TermPtr是Term *的typedef,因此您的代码正在尝试递增指针。如果你想返回一个指针,那么下面的代码应该可以解决问题,但是返回指向新术语的指针意味着你必须手动管理内存并在以后删除它,或者泄漏内存。

 TermPtr add(TermPtr p1, TermPtr p2)
    {   
        TermPtr newPoly = new Term();
        newPoly -> exponent = p1 -> exponent;
        if (p1 -> exponent == p2 -> exponent){
              newPoly -> coeff += ((p1 -> coeff) + (p2 -> coeff));
        }


        return newPoly;
    }

请注意,如果指数不匹配,您仍然会得到一个新术语(系数等于0,假设您的默认构造函数将0指定为coeff)。

你可能想要做的是这样的事情:

Term add(TermPtr p1, TermPtr p2)
{   
    Term newPoly;
    newPoly.exponent = p1 -> exponent;
    if (p1 -> exponent == p2 -> exponent){
          newPoly.coeff += ((p1 -> coeff) + (p2 -> coeff));
    }


    return newPoly;
}

这样你以后就不必自己管理记忆。

至于一般的想法,你可能想在调用add之前检查指数,以免最终出现空术语。