数据结构(第五章 数组与广义表).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文档。上传文档
查看更多
5.4 广义表的定义 下面是一些广义表的例子: 广义表的术语: A = ( ) 空表,表长为0; B = (e) B中只有一个元素e,表长为1; C = (a,(b,c,d)) C的表长为2,两个元素分别为 a 和子表(b,c,d); D = (A,B,C) D 的表长为3,它的三个元素 A,B,C 广义表; 长度:元素个数n (注意子表是一个数据元素); 单元素:一般用小写字母表示; 子表: 一般用大写字母表示; 表头: 当广义表LS 非空时,称第一个元素为L的表头,其余元素组成的表称为LS的表尾; 5.4 广义表的定义 例如: B = (e) 表头:e 表尾 ( ) C = (a,(b,c,d)) 表头:a 表尾 ((b,c,d)) D = (A,B,C) 表头:A 表尾 (B,C) 若广义表不空,则可分成表头和表尾, 反之,一对表头和表尾可唯一确定广义表 5.4 广义表的定义 广义表深度:简单说就是表的嵌套层次(括号的层数), 定义为: LS = ( d1, d2 ,… ,dn ) depth ( LS ) = max{depth(d1), depth(d2),… ,depth(dn) } + 1 0 di 是单元素 depth ( di ) = 1 di 是空表 5.4 广义表的定义 广义表及其示例 广 义 表 表长n 表深h A=() 0 1 B=(e) 1 1 C=(a,(b,c,d)) 2 2 D=(A,B,C) 3 3 E=(a,E) 2 ∞ F=(()) 1 2 a b e c d A B C D 广义表D的图形表示 5.4 广义表的定义 广义表的基本操作 1) 创建空的广义表L; 2) 销毁广义表L; 3) 已有广义表L,由L复制得到广义表T; 4) 求广义表L的长度; 5) 求广义表L的深度; 6) 判广义表L是否为空; 7) 取广义表L的表头; 8) 取广义表L的表尾; 9) 在L中插入元素作为L的第一个元素; 10)删除广义表L的第一个元素,并e用返回其值; 11)遍历广义表L,用函数visit( )处理每个元素; 广义表的基本操作 广义表的重要结论: (1) 广义表的元素可以是原子,也可以是子表,子表的元素又可以是子表, …。即广义表是一个多层次的结构。 (2) 广义表可以被其它广义表所共享,也可以共享其它广义表。广义表共享其它广义表时通过表名引用(例如D=(A,B,C),其中A,B,C分别是三个广义表)。 (3) 广义表本身可以是一个递归表。 (4) 根据对表头、表尾的定义,任何一个非空广义表的表头可以是原子,也可以是子表, 而表尾必定是广义表。 5.4 广义表的定义 5.4 广义表的存储结构 由于广义表中的数据元素可以具有不同的类型,(或是原子,可是广义表)因此难以用顺序存储结构表示,通常采用链式存储结构,一种是首尾链表,另一种是扩展线性链表,这里只介绍首尾链表存储方式(扩展线性链表存储方式可见教材5.5节)。 如何设定首尾链表结点的结构?由于广义表中的数据元素可能为原子或列表,由此需要两种结构的结点:一种是表结点,用以表示广义表;一种是原子结点,用以表示原子。从上节得知:若广义表不空,则可分成表头和表尾,反之,一对确定的表头和表尾可唯一确定广义表。由此,一个表结点可由三个域组成:标志域、指示表头的指针域和指示表尾的指针域;而原子结点只需两个域:标志域和值域 5.4 广义表的存储结构 其中 atom : 是原子结点的值域 hp:是指向表头元素结点(单元素?子表?) tp:是指向表尾元素结点(单元素?子表?) tag:是标志域,区分是什么结点(单元素?子表?) tag ptr 表结点 1 hp tp 0 tag atom 原子结点 5.4 广义表的存储结构 Typedef enum{ ATOM,LIST}ElemTag; //ATOM==0:原子,LIST==1: 列表 Typedef struct GLNode { ElemTag tag; //标志域:用于区分原子结点和表结点 union { AtomType atom;

文档评论(0)

东方888 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档