- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数组和广义表安工大计算机学院.ppt
数据结构 第五章 --数组和广义表 安工大计算机学院 第五章 数组和广义表 教学要求: 理解数组的逻辑结构和存储方式;掌握数组在以行序为主的存储结构中的地址计算方法。 理解矩阵和稀疏矩阵的压缩存储方法,掌握特殊矩阵实现压缩存储时的下标变换。 理解稀疏矩阵的两种存储方式:三元组表和十字链表; 掌握稀疏矩阵运算方法; 了解广义表的定义;理解存储结构及其取表头、表尾操作。 教学内容: 1.数组的定义 2.数组的顺序表示与实现 3.矩阵的压缩存储 4.广义表的定义 5.广义表的存储结构 5.3 广义表的概念 广义表(Lists,又称列表)是线性表的推广。在第2章中,我们把线性表定义为n=0个元素a1,a2,a3,…,an的有限序列。线性表的元素仅限于原子项,原子是作为结构上不可分割的成分,它可以是一个数或一个结构,若放松对表元素的这种限制,容许它们具有其自身结构,这样就产生了广义表的概念。 1、广义表概念: 广义表是n(n=0)个元素a1,a2,a3,…,an的有限序列,其中ai或者是原子项,或者是一个广义表。通常记作 LS=(a1,a2,a3,…,an)。 LS是广义表的名字,n为它的长度。若ai是广义表,则称它为LS的子表。 2、广义表的表示 通常用圆括号将广义表括起来,用逗号分隔其中的元素。为了区别原子和广义表,书写时用大写字母表示广义表,用小写字母表示原子。若广义表LS(n=1)非空,则a1是LS的表头,其余元素组成 的表(a2,a3,…an)称为LS的表尾。 3、广义表的例子 显然广义表是递归定义的,这是因为在定义广 义表时又用到了广义表的概念。广义表的例子如下: (1)A=()——A是一个空表,其长度为零。 (2)B=(b,c)——表B中有两个原子,B的长度为2。 (3)C=(a,(d,e,f))——表C的长度为2,两个元素分别 为原子a和子表(d,e,f)。 (4)D=(A,B,C)——表D的长度为3,三个元素 都是广义表。显然,将子表的值代入后,则有 D=(( ),(b,c),(a,(d,e,f)))。 (5)E=(a,E)——这是一个递归的表,它的长度为2, E相当于一个无限的广义表E=(a,(a,(a,(a,…)))). 图5.7 广义表的图形表示 4、广义表的特征 从上述定义和例子可推出广义表的四个重要特征: (1)广义表的元素可以是子表,而子表的元素还可以是子表。由此,广义表是一个多层次的结构,可以用图形象地表示。 (2)广义表可为其它表所共享。例如在上述例(4)中,广义表A,B,C为D的子表,则在D中可以不必列出子表的值,而是通过子表的名称来引用。 (3)广义表元素间除了次序关系,还存在着层次关系,所包括的括号层数称为广义表的深度。如表C的深度为2,E的深度为∞ (4)广义表的递归性。 综上所述,广义表不仅是线性表的推广,也是树的推广。 由于广义表(a1,a2,a3,…an)中的数据元素可以具有不同的结构,(或是原子,或是广义表),因此,难以用顺序存储结构表示,通常采用链式存储结构,每个数据元素可用一个结点表示。 由于广义表中有两种数据元素,原子或广义表,因此,需要两种结构的结点:一种是表结点,一种是原子结点。 表结点由三个域组成:标志域、指示表头的指针域和指示表尾的指针域;而原子域只需两个域:标志域和值域。 5、广义表的存储结构 tp hp tag=1 表结点 data tag=0 原子结点 其类型定义如下: typedef struct genealnode { int tag; union { int data; struct { struct genealnode *hp, *tp; } ptr; }; } *glist; tp hp tag=1 表结点 data tag=0 原子结点 E 6、广义表基本操作的实现 由表头、表尾的定义可知:任何一个非空广义表其表 头可能是广义表,也可能不是广义表,而其表尾必定是 广义表。 gethead(
文档评论(0)