我们重点给出数据结构的定义,一个良好的数据结构定义,意味着算法工作完成了一半。
稠密多项式:数组
#define MaxDegree 100
typedef struct {
int coef[MaxDegree + 1]; // 0-MaxDegree: MaxDegree + 1
int highPower; // 最高次幂
} *Polynomial;
加法:对应位相加即可,这里给出乘法的实现,一个二层循环:
void MulPoly(const Polynomial poly1, const Polynomial poly2, Polynomial polyMul){
int i;
ZeroPoly(polyMul);
polyMul->highPower = poly1->highPower + poly2->highPower;
assert(polyMul->highPower <= MaxDegree);
for (i = 0; i < poly1->highPower; ++i){
for (j = 0; j < poly2->highPower; ++j){
polyMul->coef[i+j] += poly1->coef[i] * poly->coef[j];
}
}
}
稀疏多项式:链表
typedef struct Node *PtrToNode;
struct Node{
int coef;
int power;
PtrToNode next;
};
通过本文这个小问题的求解,我们还可知,数据结构本身不是单独存在的,它的形式依赖于具体的输入。