您现在的位置: 天极网 > 开发频道 > 数据结构学习(C++)之单链表
全文

数据结构学习(C++)之单链表

2003-09-10 17:57作者:happcock出处:论坛责任编辑:方舟
  下面将完成单链表的赋值运算的重载,请把这部分加到List类的public部分。的确,这部分也可以放在多项式类里实现;但是,复制一个多项式实际上就是复制一个单链表,与其单单做一个多项式赋值,还不如完成单链表的赋值,让派生类都能共享。

operator = (const List<Type> &l)
{
 MakeEmpty();
 for (Node<Type> *p = l.first->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 = l.first->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 = polyA.pGetFirst()->link;
 Node<Term> *pB = polyB.pGetFirst()->link;
 Polynomial polyTempA, polyTempB;
 int coef, exp;
 if (pA == NULL || pB == NULL) return polyTempA;
 for (pA = polyA.pGetFirst()->link; pA != NULL; pA = pA->link)
 {
  for(pB = polyB.pGetFirst()->link; pB != NULL; pB = pB->link)
  {
   coef = pA->data.coef * pB->data.coef;
   exp = pA->data.exp + pB->data.exp;
   Term term(coef, exp);
   polyTempB.LastInsert(term);
  }
  PolyAdd(polyTempA, polyTempB);
  polyTempB.Initialize();
 }
 return polyTempA;
}

  【后记】很显然,在“+”的处理上我偷懒了,但这是最方便的。乘法部分只要参照手工运算,还是很简单的,我就不解释了。对于“-”,可以先完成(-a)这样的算法,然后就可以用加法完成了,而你要是象我一样懒很可能就会做这种事-a=-1×a,真的不提倡,超低的效率。对于除法,如果你会用汇编写多字节除法(跟手工计算很像),依样画葫芦也能弄出来,但首先要完成“-”。如果要写又得好长,留给你完成吧。到这里你明白原位加法的重要了吧,这些运算实际上都是靠它实现的。

共3页。 9 7 1 2 3

软件资讯·软件下载尽在天极软件

共3页。 首页 上一页 1 2 3
相关搜索:
相关文章及软件
关注此文读者还看过
热门关注
特别推荐
网友关注
软件下载
娱乐下载
驱动下载
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众