- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
下面是一些广义表的例子: (1)A=() A是一个空表,其长度为0。 (2)B=(a,b) B是一个长度为2的广义表,它的两个元素都是原子,因此它就是一个线性表。 (3)C=(c,B)=(c,(a,b)) C是长度为2的广义表,第一个元素是原子c,第二个元素是子表B。 (4)D=(B,C,d)=((a,b),(c,(a,b)),d) D是长度为3的广义表,第一个元素和第二个元素都为子表,第三个元素为原子d。 (5)E=(a,E)=(a,(a,(a,(…))) E是长度为2的广义表,第一个元素是原子,第二个元素是E自身,它是一个无限递归的广义表。 广义表还有其他的表示方法,如: (1)带名字的广义表表示:在每个表的前面冠以该表的名字 A() B(a,b) C(c,B(a,b)) D( B(a,b),C(c,(a,b)),d) E(a,E(a,E(a,E(…))) (2)广义表的图形表示 用非分支结点表示原子,用分支结点表示广义表(空表除外,空表中不含元素,所以也用非分支结点表示)。 广义表分为:线性表、纯表、再入表和递归表四种。 当广义表中的元素全部都是原子时,广义表就是线性表,因此也可以说线性表是广义表的一种特殊形式。上图中的广义表B就是一个线性表。 若广义表中既包含原子,又包含子表,但没有共享和递归,如广义表C,则此时的广义表就是一棵树(将在第五章讨论),称这种广义表为纯表。 允许结点的共享但不允许递归的广义表为再入表,上图中的广义表D,子表B为共享结点,它既是表D的一个元素,又是子表C的一个元素。这样的广义表与数据结构的图形结构对应(将在第六章讨论)。 允许递归的表称为递归表,上图中的广义表E为递归表,表E是其自身的子表。 递归表、再入表、纯表、线性表之间的关系满足: 递归表 再入表 纯表 线性表 广义表可以兼容线性表、树和图等各种经典的数据结构,广义表的大部分运算都与经典数据结构的运算类似。 四个特殊的运算:取表头Head(LS)、取表尾Tail(LS)、求表深、求表长。 广义表的表头(Head)为广义表的第一个元素,广义表的表尾(Tail)为广义表中除第一个元素外,剩下所有的元素组成的广义表。 对广义表LS =(a1, a2, ……, an)来说,取表头、取表尾的运算定义为: Head(LS) =a1,Tail(LS) = (a2, ……, an )。 例如: Head((a,b))= a Tail((a,b))=(b) Head((a))= a Tail((a,b),c,(a,b)))=( c,(a,b))) 任何一个非空广义表LS =(a1, a2, ……, an)均可分解为表头和表尾两个部分。反之,一对表头和表尾也可唯一确定一个广义表。根据表头、表尾的定义可知:任何一个非空广义表的表头是表中第一个元素,它可以是原子,也可以是子表,但表尾必定是子表。 广义表()和(())不同。前者是长度为0的空表,而后者是长度为l的非空表,其表头和表尾均是空表()。 广义表是一个多层次的结构,广义表的元素可以是子表,子表的元素仍可以是子表。若将广义表的子表展开成全部由原子组成,则可将广义表的深度定义为表中所含括号的最大层数;而广义表的长度为表中包含的元素个数。 第四章 多维数组及广义表 前几章介绍的数据结构都是线性结构,数据元素都属于原子类型,其值不分解使用。 本章讨论的多维数组和广义表是线性结构的推广,从整体上看它们是多个元素组成的线性表,而从局部上看线性表中的数据元素不一定是原子类型,即数据元素又可以具有某种数据结构。 主要内容: 4.1 多维数组 多维数组的逻辑结构特征及存储方式 4.2 矩阵的压缩存储 特殊矩阵和稀疏矩阵的压缩存储 4.3 广义表 广义表的定义和运算 4.1 多维数组 一、多维数组的逻辑结构特征 数组中的元素具有相同类型,且下标一般具有固定的上界和下界。 数组可以是一维的,也可以是多维的。 本章主要以二维数组为例来分析多维数组的逻辑结构特征和存储结构。 二维数组可以看成是由多个一维数组组成的。例如,二维数组Amn既可看成由m个行向量组成的线性表,也可看成是由n个列向量组成的线性表。 二维数组的逻辑结构具有如下特征: a00为开始结点,它没有直接前趋; am-1,n-1为终端结点,它没有直接后继; 结点a0,n-1和am-1,0都有一个直接前趋和一个直接后继; 除以上四个结点外,第一行和第一列的元素都有一个直接前趋和两个直接后继,最后一行和最后一列的元素都有两个直接前趋和一个直接后继; 其余的非边界元素aij同时处于
文档评论(0)