第7章广义表.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章广义表

第7章 广义表 广义表是另一种推广形式的线性表,是一种灵活的数据结构,在许多方面有广泛的应用。 * * 7.1 广义表概述 线性表:由n(n≧0 )个元素a1, a2 ,…, an的有穷序列,该序列中的所有元素具有相同的数据类型且只能是原子项(Atom)。 所谓原子项可以是一个数或一个结构,是指结构上不可再分的。若放松对元素的这种限制,容许它们具有其自身结构,就产生了广义表的概念。 广义表(Lists,又称为列表 ):是由n(n ≧0)个元素组成的有穷序列: LS=(a1,a2,…,an),其中ai或者是原子项,或者是一个广义表。LS是广义表的名字,n为它的长度。若ai是广义表,则称为LS的子表。 习惯上:原子用小写字母,子表用大写字母。 若广义表LS非空时: ◆ a1(表中第一个元素)称为表头; ◆ 其余元素组成的子表称为表尾;(a2,a3,…,an) ◆ 广义表中所包含的元素(包括原子和子表)的个数称为表的长度。 ◆ 广义表中括号的最大层数称为表深 (度)。 有关广义表的这些概念的例子如表7-1所示。 表7-1 广义表及其示例 2 1 F=(()) ∞ 2 E=(a,E) 3 3 D=(A,B,C) 2 2 C=(a,(b,c,d)) 1 1 B=(e) 0 0 A=() 表深h 表长n 广 义 表 a b e c d A B C D 图7-1 广义表的图形表示 广义表的重要结论: ⑴ 广义表的元素可以是原子,也可以是子表,子表的元素又可以是子表, …。即广义表是一个多层次的结构。 表7-1中的广义表D的图形表示如图7-1所示。 (2) 广义表可以被其它广义表所共享,也可以共享其它广义表。广义表共享其它广义表时通过表名引用。 (3) 广义表本身可以是一个递归表。 (4) 根据对表头、表尾的定义,任何一个非空广义表的表头可以是原子,也可以是子表, 而表尾必定是广义表。 7.2 广义表的抽象数据类型 ADT GList{ 数据对象:D = { ai | ai∈ElemSet, i=1,2,…,n, n≧0 } 数据关系:R = {ai-1, ai | ai-1, ai∈D, i=2,3,…,n } 基本操作: InitList( L ) 操作结果:构造一个空的线性表L; ⑴ 创建广义表: CreatGList(S) ⑵ 求长度: GListLength(L) ⑶ 求原子元素个数: GListAtomNum(L) ⑷ 求深度: GListDepth(L) ⑸ 判断非空否: GListNotEmpty(L) ⑹ 取表头: GetHead(L) ⑺ 取表尾: GetTail(L) ⑻ 插入: GListInsert(L, e) ⑼ 删除: GListDelete(L, e) ⑽ 查找原子元素: GListSearch(L, e) ⑾ 撤销: Destroy(L) } ADT GList 7.3 广义表的存储结构 由于广义表中的数据元素具有不同的结构,通常用链式存储结构表示,每个数据元素用一个结点表示。因此,广义表中就有两类结点: ◆ 一类是表结点,用来表示广义表项,由标志域,表头指针域,表尾指针域组成; ◆ 另一类是原子结点,用来表示原子项,由标志域,原子的值域组成。如图7-2所示。 只要广义表非空,都是由表头和表尾组成。即一个确定的表头和表尾就唯一确定一个广义表。 相应的数据结构定义如下: typedef struct GLNode { int tag ; /* 标志域,为1:表结点;为0 :原子结点 */ union { elemtype value; /* 原子结点的值域 */ struct { struct GLNode *hp , *tp ; }ptr ; /* ptr和atom两成员共用 */ }Gdata ; } GLNode ; /* 广义表结点类型 */ 标志tag=0 原子的值 标志tag=1 表头指针hp 表尾指针tp 图7-2 广义表的链表结点结构示意图 (b) 表结点 (a) 原子结点 例: 对A=(),B=(e),C=(a, (b, c, d) ),D=(A, B, C),E=(a, E)的广义表的存储结构如图7-3所示。 A=NULL 1 ∧ 0 e B 1 0 a C 1 0 b 1 ∧ 1 0 c 1 ∧ 0 d D 1 ∧ 1 1

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档