算法与数据结构集合与字典 .ppt

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法与数据结构集合与字典 .ppt

算法与数据结构 9.1.2集合类 我们可以定义一个集合类。定义这个类主要是为了说明各种实现集合的数据结构都应当具有的操作。这个类里没有为集合的实现而设置的内部数据结构,因此也就不需要构造函数和析构函数。 template class T class set { public: virtual int isEmpty(void) const = 0; virtual int includes (const T val) const = 0; virtual void add (const T val) = 0; virtual void remove (const T val) = 0; ? void intersectWith (const setT) {}; void unionWith (const setT) {}; void differenceFrom (const setT) {}; int subset (const setT) { return 0; }; int operator == (const setT) { return 0; }; }; 类9.1 集合类 我们无法把set中的方法都定义为纯虚函数,因为在实现集合操作的成员函数里都包含了对集合类的实例对象的引用参数。这种情况下函数不能定义为纯虚的。这里为每个函数虚构了一个函数体,它们是永远不会被真正使用的。 这里还有一个新情况,在set类的定义里面直接写出intersectWith等成员函数的定义,而不是只写它们的原型。C++允许这样做。当成员函数很短小时,为紧凑或消除过多重复描述,常采用这种写法 举一个例子讨论上面提出的问题。假设我们把unionWith定义为纯虚函数,函数在类规范里的原型应该是: virtual void unionWith (const setT) = 0; 在set的实际子类中就必须给出unionWith的实现,而实际上我们无法给出具有同样函数原型的函数的实际实现。 为说明这个问题,假设我们要把setA定义为set的非抽象的子类,现在考虑它的定义以及其中纯虚函数unionWith的规范。按照需要,我们应该写: template class T class setA : public setT { ... ... virtual void unionWith (const setAT s); ... ... } 但是,在这样定义好类规范并建立的setA所有成员函数之后,会发现仍然无法建立setA的实例对象。 例如,如果我们写出下面的变量定义 setAint s1; 程序编译时会发生错误,系统将告诉我们:在建立setA的实例时,遇到了没有给出定义的纯虚函数void unionWith(const setint)。 因为在上面setA里定义的unionWith函数的参数类型与set里unionWith的参数不同,这将被认为是对原函数名的另一个重载定义,而原来的纯虚函数仍然没有定义。 显然,在setA里把unionWith定义为: virtual void unionWith (const setT s); 是没有意义的,不会有抽象类的实例成为实际参数,因为根本没有这种实例。 上述问题是可能通过其他途径绕过去的,但那将使问题大大的复杂化,给出的定义很费事,理解起来也比较困难。这里选择的是一种较自然方便的做法。 在这节里,我们将考虑利用表实现集合的方法,也就是说,在集合对象中用一个表数据成分,借助它存储集合的元素。根据这个想法定义的setList见类9.5。 ? template class T class setList : public setT { protected: listT slist; public: setList(); // 构造函数 setList(const setListT );? virtual inline int isEmpty() const { return slist.isEmpty(); }; virtual inline int includes (T val) const { slist.includes (val) } virtual void add (T val); // 往集合里增加新元素 virtual void remove( T ); // 删除 void unionWith(const setListT ); // 求并 void inter

文档评论(0)

cnsg + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档