新数据结构与算法 第3版 教学课件 张小莉 第3章 线性结构的扩展.pptVIP

新数据结构与算法 第3版 教学课件 张小莉 第3章 线性结构的扩展.ppt

  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 =() B =(e) C =(a,(b,c,d)) D =(A,B,C) E =(a,E) F =(()) ⒉广义表的性质 从上述广义表的定义和例子可以得到广义表的下列重要性质: ⑴广义表是一种多层次的数据结构。广义表的元素可以是单元素,也可以是子表,而子表的元素还可以是子表,…。 ⑵广义表可以是递归的表。广义表的定义并没有限制元素的递归,即广义表也可以是其自身的子表。例如表E就是一个递归的表。 ⑶广义表可以为其他表所共享。例如,表A、表B、表C是表D的共享子表。在D中可以不必列出子表的值,而用子表的名称来引用。 ⒊广义表基本运算 广义表有两个重要的基本操作,即取头操作(Head)和取尾操作(Tail)。 根据广义表的表头、表尾的定义可知,对于任意一个非空的列表,其表头可能是单元素也可能是列表,而表尾必为列表。例如: Head(B)= e Tail(B)=() Head(C)= a Tail(C)=((b,c,d)) Head(D)= A Tail(D)=(B,C) Head(E)= a Tail(E)=(E) Head(F)=() Tail(F)=() 此外,在广义表上可以定义与线性表类似的一些操作,如建立、插入、删除、拆开、连接、复制、遍历等。 CreateLists(ls):根据广义表的书写形式创建一个广义表ls。 IsEmpty(ls):若广义表ls空,则返回True;否则返回False。 Length(ls):求广义表ls的长度。 Depth(ls):求广义表ls的深度。 Locate(ls,x):在广义表ls中查找数据元素x。 Merge(ls1,ls2):以ls1为头、ls2为尾建立广义表。 CopyGList(ls1,ls2):复制广义表,即按ls1建立广义表ls2。 Head(ls):返回广义表ls的头部。 Tail(ls):返回广义表的尾部。 …… 3.3.2 广义表的存储 由于广义表中的数据元素可以具有不同的结构,因此难以用顺序的存储结构来表示。而链式的存储结构分配较为灵活,易于解决广义表的共享与递归问题,所以通常都采用链式的存储结构来存储广义表。在这种表示方式下,每个数据元素可用一个结点表示。 ⒈头尾表示法 若广义表不空,则可分解成表头和表尾;反之,一对确定的表头和表尾可惟一地确定一个广义表。头尾表示法就是根据这一性质设计而成的一种存储方法。 其形式定义说明如下: typedef enum {ATOM, LIST} Elemtag; /*ATOM=0:单元素;LIST=1:子表*/ typedef struct GLNode { Elemtag tag; /*标志域,用于区分元素结点和表结点*/ union { /*元素结点和表结点的联合部分*/ datatype data; /*data是元素结点的值域*/ struct { struct GLNode *hp, *tp }ptr; /*ptr是表结点的指针域,ptr.hp和ptr.tp分别指向表头和表尾*/ }; }*GList; /*广义表类型*/ 头尾表示法的结点形式如图所示。 对于4.3.1所列举的广义表A、B、C、D、E、F,若采用头尾表示法的存储方式,其存储结构如图所示。 ⒉孩子兄弟表示法 广义表的另一种表示法称为孩子兄弟表示法。在孩子兄弟表示法中,也有两种结点形式:一种是有孩子结点,用以表示列表;另一种是无孩子结点,用以表示单元素。在有孩子结点中包括一个指向第一个孩子(长子)的指针和一个指向兄弟的指针;而在无孩子结点中包括一个指向兄弟的指针和该元素的元素值。为了能区分这两类结点,在结点中还要设置一个标志域。如果标志为1,则表示该结点为有孩子结点;如果标志为0,则表示该结点为无孩子结点。 其形式定义说明如下: typedef enum {ATOM, LIST} Elemtag;

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档