- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章、基本线性表第2章、基本线性表
第2章、基本线性表 2.1线性表的基本概念 线性表是最常用且最简单的一种数据结构。 线性表是具有相同属性数据元素的一个有限序列。通常表示成下列形式: L=( a1, a2,...,ai-1,ai,ai+1,...,an) 在线性表L中, a1为开始结点, an为终端结点。结点ai-1是结点ai的前驱结点,结点ai+1是结点ai的后继结点。 n(n≥0)表示线性表的长度 当n=0时,表示线性表是一个空表。 线性表中数据元素的含义广泛,在不同的具体情况下,可以有不同的含义。 英文字母表 (A,B,C,…,Z) 某公司2007年上半年每月产值表(单位:万元) (400,320,450,500,480,600) 学生信息表 线性表的特点 开始结点只有后继结点而没有前驱结点 终端结点只有前驱结点而没有后继结点 除了开始结点和后继结点以外,其余结点都有且只有一个前驱结点和一个后继结点 2.2 线性表的相关操作 线性表的基本操作 初始化线性表 求线性表的长度 取线性表L中的第i个元素 修改线性表中的第i个元素 删除线性表中的第i个元素 在线性表中第i个元素之后(前)插入一个新元素 2.3 线性表的顺序存储结构及操作实现 线性表的存储方式有顺序存储和链式存储。 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表的数据元素。 逻辑关系相邻,物理位置相邻 LOC(ai)=LOC(ai-1)+C LOC(ai)=LOC(a1)+(i-1)*C 顺序存储结构是一种随机存取结构。 在高级语言环境中,常用一维数组来存储线性表。 顺序表的基本操作 初始化 为更好体现信息隐蔽原则和数据抽象原则,把顺序表封装起来。(使用类模板) 模板分为类模板和函数模板 类模板就是建立一个通用类,其数据成员的类型、成员函数的返回类型和参数类型都不具体指定,用一个虚拟类型来代表。当使用类模板建立对象时,系统会根据实参的类型来取代类模板中的虚拟类型从而实现不同类的功能。 类模板的一般说明形式是 template类型形式参数表class className { //类声明体 }; 建立类模板后,可用下列方式创建类模板的实例 className类型实在参数表 object; 类模板是模板的定义,不是一个实实在在的类,定义中用到通用类型参数。 模板类是实实在在的类定义,是类模板的实例化。类定义中参数被实际类型所代替。 顺序表类 插入 假设线性表的存储空间为m个单元,线性表的长度为n(n=m),且插入的位置为i(i表示在第i个元素之前插入),插入的新元素为b,则情况如下: 当n=m时,不能再插入数据,此时出现“上溢”错误,算法给出提示后结束; 当in时,认为在最后一个元素之后插入; 当i1时,认为在第1个元素之前插入; 将第i个元素至尾元素逐一向后移动一个位置。 将新元素插入到第i个的位置上,并将顺序表长度增加1。 //在表的指定元素前插入新元素 template class T void sq_LListT::ins_sq_LList(int i, T b) { int k; if (nn==mm) //存储空间已满,上溢错误 { cout overflow endl; return; } if (inn) i=nn+1; //默认为在最后一个元素之后插入 if (i1) i=1; //默认为在第一个元素之前插入 for (k=nn; k=i; k--) v[k]=v[k-1]; //从最后一个元素直到第i个元素均后移一个位置 v[i-1]=b; //插入新元素 nn=nn+1; //顺序表长度加1 return; } 删除 假设线性表的存储空间为m个单元,线性表的长度为n(n=m),且要删除第i个元素,则情况如下: 当n=0时,不能再删除数据,此时出现“下溢”错误,算法给出提示后结束; 当in或i1时,表示表中没有这个元素。 将表中第i+1个元素至尾元素逐一向前移动一个位置,并将顺序表长度减少1。 //在顺序表中删除指定位置的元素 template class T void sq_LListT::del_sq_LList(int i) { int k; if (nn==0) //顺序表为空,下溢错误 { cout underflow! endl; return; } if ((i1)||(inn)) //顺序表中没有这个元素 { cout Not this element in the list! endl; return;
文档评论(0)