第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文档。上传文档
查看更多
广义表的长度指广义表中数据元素(原子元素或广义表)的个数。如广义表A的长度为0,广义表B的长度为3,广义表C的长度为1,广义表D的长度为2(注意D中只有两个数据元素B和C),广义表E的长度为2。 广义表的原子元素个数指广义表中原子数据元素的个数。如广义表A的原子元素个数为0,广义表B的原子元素个数为3,广义表C的原子元素个数为1,广义表D的原子元素个数为4,广义表E的原子元素个数为5。 广义表的深度指广义表中所有原子数据元素到达根结点的最大值。一个广义表对应了一棵树,广义表的深度即是指广义表所对应的树的深度。如广义表A,B和C的深度均为1,广义表D的深度为2,广义表E的深度为3。 一个广义表无论简单或复杂,都可以分做表头和表尾两部分。任何一个非空广义表的表头既可能是原子也可能是广义表,但非空广义表的表尾一定是一个广义表。 例如广义表(a,b),其表头为原子a,其表尾为广义表(b);又例如广义表(b),其表头为原子b,其表尾为空广义表();又例如广义表(((a,b,c),(d)),e),其表头为广义表((a,b,c),(d)),其表尾为广义表(e)。 对任何一个广义表的处理都可以由对表头的处理部分和对表尾的处理部分两部分组成。 广义表有许多应用,其中最典型的,是在表处理语言LISP中,把广义表作为基本的数据结构,就连程序也表示为一系列的广义表。另外,广义表还可以用来表示m元多项式。所谓m元多项式就是其每一项最多允许有m个变元。 数据集合: 广义表的数据集合可以表示为a0, a1, a2, ..., an-1,每个 数据元素或是原子元素,或是一个广义表。 操作集合: (1)创建广义表CreatGList(S) (2)求长度GListLength(L) (3)求原子元素个数GListAtomNum(L) (4)求深度GListDepth(L)  广义表抽象数据类型 (5)判非空否GListNotEmpty(L) (6)取表头GetHead(L) (7)取表尾GetTail(L) (8)插入GListInsert(L, e) (9)删除GListDelete(L, e) (10)查找原子元素GListSearch(L, e) (11)撤消DestroyGList(L) 7.2 广义表的存储结构 头链和尾链存储结构 一个广义表可以由表头和表尾两部分组成,所以可以用一个头指针和一个尾指针表示一个广义表。这样,头链和尾链结构中一个结点的结构由一个标志域tag决定:当tag值为1时,该结点除标志域外还有一个头指针域和一个尾指针域;当tag值为0时,该结点除标志域外还有一个原子元素域。 原子和子表存储结构 观察上图中的结点可以发现,头链和尾链存储结构中当结点为原子元素时,需要由头指针所指的结点存储该原子元素。若此时在该结点中直接存储该原子元素,则构成了原子和子表结构。其中标志tag含义同上,即tag值为1时,该结点除标志域外还有一个头指针域和一个尾指针域;当tag值为0时,该结点除标志域外还有一个原子元素域 7.3 广义表的操作实现   本节分别讨论头链和尾链存储结构下和原子和子表存储结构下一些典型操作的算法实现。 头链和尾链存储结构下,结点的结构体定义 typedef struct GListNode { int tag; union { DataType atom; //原子元素域 struct { struct GListNode *head; //头链 struct GListNode *tail; //尾链 }subList; } val; }GLNode; 创建广义表 创建广义表就是按照所给的表示具体广义表的字符串str创建一个广义表h。 对一个广义表的任何操作都可以分解为对表头的操作和对表尾的操作。同样,创建广义表操作可以分解为创建表头广义表和创建表尾广义表。因此,创建广义表函数CreatGList(str)只要递归完成对表头广义表的创建和对表尾广义表的创建即可。 这样,还需要设计一个把表示广义表的字符串str分解成表头字符串hstr和表尾字符串str的函数DecomposeStr(str, hstr)。

文档评论(0)

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

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

1亿VIP精品文档

相关文档