数据结构广义表本.ppt

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

第五章广义表本讲内容1.广义表的定义2.广义表的顺序存储3.广义表的递归算法广义表的定义广义表是由零个或多个原子或子表组成的有限序列,是线性表的推广。定义相关概念广义表一般记作:LS=(d1,d2,…,dn)LS是广义表(d1,d2,…,dn)的名称,n是它的长度。di可以是单个元素,也可以是广义表,分别称为广义表LS的原子和子表。大写字母小写字母广义表的相关概念当广义表LS非空时,称第一个元素d1为LS的表头(Head),称其余元素组成的子表(d2,…,dn)是LS的表尾(Tail)。非空广义表可唯一分解成表头和表尾;反过来,由表头和表尾可唯一组成一个广义表。广义表括号的层数定义为广义表的深度。广义表LS=(?1,?2,…,?n)的结构特点:(1)广义表中的数据元素有相对次序;(2)广义表的长度定义为最外层包含元素个数;(3)广义表的深度定义为所含括弧的重数;注意:“原子”的深度为0“空表”的深度为1(4)广义表可以共享;(5)广义表可以是一个递归的表。递归表的深度是无穷值,长度是有限值。(6)任何一个非空广义表LS=(?1,?2,…,?n)均可分解为表头Head(LS)=?1和表尾Tail(LS)=(?2,…,?n)两部分。例如:D=(E,F)=((a,(b,c)),F)Head(D)=ETail(D)=(F)Head(E)=aTail(E)=((b,c))Head(((b,c)))=(b,c)Tail(((b,c)))=()Head((b,c))=bTail((b,c))=(c)Head((c))=cTail((c))=()举例广义表举例GetHead((a,b,c))GetTail((a,b,c,d))GetHead(((a,b),(d)))GetTail(((a,b),(d)))GetHead(GetTail(((a,b),(c,d))))a(b,c,d)(a,b)((d))(c,d)广义表的存储结构1.头尾链表存储表示2.扩展线性链表存储广义表的头尾链表由于非空广义表可以分解为表头和表尾,因此采用链表存储广义表时需要指向表头和表尾的指针。为了区分表结点和原子结点,需要设置标志量。表结点原子结点tag=1hptptag=0atom广义表的头尾链表C描述typedefenum{ATOM,LIST}ElemTag;//ATOM==0:原子,LIST==1:子表typedefstructGLNode{ElemTagtag;//标志域,区分原子和子表union{AtomTypeatom;//原子结点的数据域struct{structGLNode*hp,*tp;}ptr;//表结点的头尾指针};}*GList;共用存储单元tag=1hptpptr表结点原子结点tag=1atomL=(a,(x,y),((x)))a(x,y)()1LL=()0a111110x???()x0x1?0y广义表头尾链表示例广义表的扩展线性链表存储广义表时还可以采用线性链表存储思想,利用tp指向广义表中下一个结点,即在同层存储所有兄弟。若兄弟为原子结点,标志tag=0,共用体数据为atom;若兄弟为表结点,标志tag=1,共用体数据为指针hp,指向其表头结点。表结点原子结点tag=1hptptag=0atomtp广义表的扩展线性链表C描述typedefenum{ATOM,LIST}Ele

文档评论(0)

优美的文学 + 关注
实名认证
内容提供者

优美的文学优美的文学优美的文学优美的文学优美的文学

1亿VIP精品文档

相关文档