网站大量收购独家精品文档,联系QQ:2885784924

[工学]第五章 数组与广义表.ppt

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]第五章 数组与广义表

广义表是一个多层次的线性结构 例: 有A、B、C、D、E五个广义表的描述如下: A=( ) A是一个空表,它的长度为零 B=(e) B只有一个原子e,B的长度为1 C=(a,(b,c,d)) C的长度为2,两个元素分别为原子a和子表(b,c,d) D=(A,B,C) D的长度为3,三个元素都是列表,显然,将子表的值代入后,则有D=((),(e),(a,(b,c,d))) E=(a,E) 这是一个递归的表,它的长度为2, E是一个无限的列表E=(a,(a,(a,...))) 有序性 有长度 有深度 可递归 表头表尾 可共享 广义表的特点 1) 广义表中的数据元素有相对次序; 2) 广义表的长度定义为最外层包含的元素个数; 3) 广义表的深度定义为所含括弧的重数; 注意: “原子”的深度为“0”; “空表”的深度为1 4) 广义表可以是一个递归的表; 递归表的深度是无穷值,但长度是有限值 广义表的结构特点 5) 任何一个非空广义表 LS = ( a1, a2, …, an) 均可分解为两部分: 表头 Head(LS) = a1 和 表尾 Tail(LS) = ( a2, …, an) 其中,表头可以是原子或列表;表尾必定是列表 A=(b,c) Head( A ) = b Tail( A ) = (c) A1=((b,c)) Head( A ) = ( b, c) Tail( A1) = ( ) Head( (a, ( b, c)) ) = a Tail(( a, ( b, c) )) = (( b,c )) 例如: 广义表的定义: ADT GList{ 数据对象: D={ei∈AtomSet或ei∈GList, i=1,2,...,n, n≥0; AtomSet为某个数据对象} 数据关系:R1={ei-1,ei|ei-1,ei∈D,2=i=n} 基本操作: InitGlist(L); 操作结果:创建空的广义表L CreateGList(L,S); 初始条件:S是广义表的书写形式串 操作结果:由S创建广义表L DestroyGlist(L); 初始条件:广义表L存在 操作结果:销毁广义表L CopyGlist(T,L); 初始条件: 广义表L存在 操作结果:由广义表L复制得到广义表T GListLength(L); 初始条件:广义表L存在 操作结果:求广义表L的长度,即元素个数 GListDepth(L); 初始条件:广义表L存在 操作结果:求广义表L的深度 GlistEmpty(L); 初始条件:广义表L存在 操作结果:判断广义表L是否为空 GetHead(L); 初始条件:广义表L存在 操作结果:取广义表L的头 GetTail(L); 初始条件:广义表L存在 操作结果:取广义表L的尾 InsertFirst_GL(L,e); 初始条件:广义表L存在 操作结果:插入元素e作为广义表L的第一元素 DeleteFirst_GL(L,e); 初始条件:广义表L存在 操作结果:删除广义表L的第一元素,并用e返回其值 Traverse_GL(L,Visit()); 初始条件:广义表L存在 操作结果:遍历广义表L,用函数Visit处理每个元素 } ADT GList 1. 头、尾指针的链表结构 表结点: 原子结点: 1 tag hp tp 0 ai tag atom 5.5 广义表的存储结构 构造存储结构的方法: 空表LS=Nil 非空表: LS 若表头为原子,则为 否则,依次类推 1 表头 表尾 0 a1 tag hp tp tag atom typedef emnu{Atom,List} ElemTag; typedef struct GLNode{ ElemTag tag; //tag=0:原子,tag=1:子表 union{ AtomType atom; //原子结点的元素值 struct{struct GLNode *hp,*tp;} ptr; //表结点的指针域,ptr.hp和ptr.tp分别 指向表头和表尾 } }  *GList; //广义

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档