单链表()
下面将完成单链表的赋值运算的重载请把这部分加到List类的public部分的确这部分也可以放在多项式类里实现但是复制一个多项式实际上就是复制一个单链表与其单单做一个多项式赋值还不如完成单链表的赋值让派生类都能共享
operator = (const List<Type> &l)
{
MakeEmpty();
for (Node<Type> *p = lfirst>link; p != NULL; p = p>link) LastInsert(p>data);
}
还记得List类的private里面的这个List(const List<Type> &l)吗?当初怕它惹祸直接将它禁用了既然现在=都能用了为了这种语法List<Type> b = a;顺便也把它完成了吧现在可以把它从private放到public了
List(const List<Type> &l)
{
first = current = last = new Node<Type>; prior = NULL;
for (Node<Type> *p = lfirst>link; p != NULL; p = p>link) LastInsert(p>data);
}
终于可以这样写了a = b + c * d
friend Polynomial operator + (Polynomial &polyA Polynomial &polyB)
{
Polynomial tempA = polyA;Polynomial tempB = polyB;
PolyAdd(tempA tempB);
return tempA;
}
friend Polynomial operator * (Polynomial &polyA Polynomial &polyB)
{
Node<Term> *pA = polyApGetFirst()>link;
Node<Term> *pB = polyBpGetFirst()>link;
Polynomial polyTempA polyTempB;
int coef exp;
if (pA == NULL || pB == NULL) return polyTempA;
for (pA = polyApGetFirst()>link; pA != NULL; pA = pA>link)
{
for(pB = polyBpGetFirst()>link; pB != NULL; pB = pB>link)
{
coef = pA>datacoef * pB>datacoef;
exp = pA>dataexp + pB>dataexp;
Term term(coef exp);
polyTempBLastInsert(term);
}
PolyAdd(polyTempA polyTempB);
polyTempBInitialize();
}
return polyTempA;
}
【后记】很显然在+的处理上我偷懒了但这是最方便的乘法部分只要参照手工运算还是很简单的我就不解释了对于-可以先完成(-a)这样的算法然后就可以用加法完成了而你要是象我一样懒很可能就会做这种事-a=-×a真的不提倡超低的效率对于除法如果你会用汇编写多字节除法(跟手工计算很像)依样画葫芦也能弄出来但首先要完成-如果要写又得好长留给你完成吧到这里你明白原位加法的重要了吧这些运算实际上都是靠它实现的