严蔚敏版数据结构中的例子,不过我没用C语言,而用了C++,因为C++标准模板库中已经有了各种泛型容器,用起来比较方便。
这是第一篇,实现了2.4节:一元多项式的表示及相加,详细代码见http://codepad.org/cV4t8YLq
下面说一下核心算法:
Polynomial &Polynomial::operator+=(Polynomial right)
{
for (Polynomial::iterator i = this->begin(), j = right.begin();
j != right.end();
++j)
{
while (this->cmp(j, i) == 1) ++i;
if (this->cmp(j, i) == -1)
{
this->MyInsert(i, *j);
}
else
{
this->MyMerge(i, j->k);
}
}
return *this;
}
即加法功能,把右操作数的加到左操作数,所以先是一个for循环遍历右操作数,
然后根据两个迭代器,可以分三种情况:
一是可以插入
二是可以合并
三是无法做这上述两种情况,需要累加左操作数。
这里面用了三个小函数,
一是用于确定上述三种情况的哪一种的函数cmp,
<