- 1、本文档共42页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二讲 算法与线性表 基本思想 ——逐步“划分” 划分规则: 保证模块的粒度应逐步变小; 保证当前正确。 描述方法——伪码 基本思想 ——分而治之 分治前提——可分治 long Partition (long a[], long p1, long p2) {//对a[p1]~a[p2]进行分割,返回分割点的序号 long i, j; int x; i =p1; j =p2; x =a[i]; while (ij){ while ( a[j]=x ij ) j-- ; //右?左扫描 if (ij) {a[i]=a[j]; i++;} while (a[i]=x ij ) i++; //左?右扫描 if (ij) {a[j] =a[i]; j--;} } a[i]=x; return i; } 长度:线性表中元素的个数称为线性表的长度。 空表:无元素的表(n=0)称为空表,空表长度为0 。 按形式化方法,线性表定义为: LL=(D,S) D={a1,a2,…,an} S={r} r= { ai-1, ai|ai∈D,i=2, …, n}。 抽象数据类型(abstract data type,ADT)是指一个数学模型与定义在该模型上的一组操作。 由一组数据结构和在该数据上的一组操作所组成; 一般数据类型由具体语言系统内部定义,ADT是由编程者定义; 在定义ADT时,数据结构部分只要求定义逻辑结构,操作部分只要求定义操作说明; ADT较一般的数据类型抽象层次更高,更能为其它用户提供良好的使用接口。 ADT在C++中通过类来描述: ADT的数据部分定义为类私有(private)或保护(protected)的数据成员; ADT的操作部分定义为类的公共(public)成员函数,并且只给出操作说明(即函数声明); 操作的具体实现是在一个单独文件中给出,类的声明存放在一个专门的头文件中,使两者分离开,体现面向对象的程序设计(OOP)思想。 我们将线性表视为一个抽象对象/类(亦称接口),即不考虑它的具体数据结构存储,不考虑基本操作的实现,只考虑它的基本操作的接口(输入/输出) 。 类模板: template 模板参数表 class 类名 {类成员声明} 如果需要在类模板以外定义其成员函数,则要采用以下的形式: template 模板参数表 类型名 类名T::函数名(参数表) template class TElem //模板声明,表明TElem是一个可变(调)类型,在使用TLinearList0时动态决定 //有了这个声明,TLinearList0中可直接将TElem做为已知类型使用。 class TLinearList0 { protected: public: long len; virtual TBool IsEmpty() {if (len =0) return True; else return False;} virtual TElem Get(long idx) = 0; //声明虚函数,不需要给出实现 virtual TElem *Set(long idx, TElem elem) = 0; virtual TElem *Prior(long idx) = 0; virtual TElem *Next(long idx) = 0; virtual TElem *GetAddress(long idx)=0; virtual long CountElem(TElem elem)=0; virtual long Locate(TElem elem, long sn=1) = 0; virtual long Locate(TElem elem, long *foundElem) = 0; virtual long LocateFirst(TElem elem) = 0; virtual long LocateNext(TElem elem) = 0; virtual TElem *Insert(TElem elem, long sn=1) = 0; virtual TElem *Delete(long sn=1)=0; virtual long Delete(TIndexSelector sel, TElem **elemDeleted=NULL)=0; virtual long DeleteByIndex(long *idxTobeDel,long numIdx, TElem *elemDeleted=NULL)=0; }; 抛掷异常的程序段 ...... throw 表
文档评论(0)