数据结构:面向对象语言描述Bppt277.ppt

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

数 据 结 构 面 向 对 象 语 言 描 述 数据结构广义表 广义表的初步认识 广义表(又称为列表)是n(n=0)个数据元素a1,a2,…, ai ,…,an的有限序列,一般记作: ls=(a1,a2,…, ai ,…,an) 其中,ls是广义表(a1,a2,…,an)的名称,n是它的长度。每个ai (1=i=n)是ls的成员,它可以是单个元素,也可以是一个广义表, 分别称为广义表ls的单元素和子表。当广义表ls非空时,称第一个元素a1为ls的表头(head), 称第其余元素组成的表(a2,a3 ,…,an)为ls的表尾(tail) 广义表的初步认识 例: A=( ) A是空表,其长度为0。 B=(e) B中只有一个单元素e,长度为1。 C=(a,(b,c,d)) D=(A,B,C) D的长度为3,三个元素都是列表。 D=(( ),(e), (a,(b,c,d))) E=(a,E) E是一个长度为2的递归的广义表,E相当于一个无穷表E=(a, (a, (a,……))) F=(( )) F的长度为1,其中的一个元素为一个空表。 广义表的初步认识 特性: (1)广义表是一个多层次的结构。因为广义表的元素可以是一个子表,而子表的元素还可以是子表。 (2)广义表可以为其它广义表所共享。例如在上述的例子中,广义表A,B,C为D的子表,则在D中可以不必列出子表的值,而是通过子表的名称来引用。 (3)广义表可以是一个递归表,即广义表也可以是本身的一个子表。例如广义表E就是一个递归表。 二个重要的基本操作 取头操作 head 取尾操作 tail 对于广义表ls=(a1,a2,…,an) head(ls)= a1 tail(ls)= (a2, a3 ,…,an) 对于任意一个非空的列表,其表头可能是单元素也可能是列表,而其表尾必为列表。例如: head(C)=a tail(C)=(b,c,d) head(D)=A tail(D)=(B,C) head(F)=( ) tail(F)=( ) 取头去尾复合操作 用H表示取头操作head,用T表示取尾操作tail,对于广义表ls=(a,(b,c,d))执行一系列的基本操作,其结果如下: H(ls)=a T(ls)= ((b,c,d)) H(T(ls))=(b,c,d) T(T(ls))=( ) H(H(T(ls)))=b T(H(T(ls)))= (c,d) 广义表抽象数据类型 数据元素: D={ei|i=1,2,……,n ; n≧0; ei ∈ AtomSet或ei ∈ GList} 结构关系: R1={ ei-1 , ei | ei-1 , ei ∈ D, 2≤i≤n } 基本操作: 对广义表可执行以下的基本操作。 InitGList(L) 初始化。创建一个空的广义表L。 CopyGList(L,L0) 复制。由广义表L0复制得到一个广义表L。 GListDepth(L) 求深度。求广义表L的深度。 GListLength(L) 求长度。求广义表L的长度,即元素个数。 GlistEmpty(L) 判空表。判广义表L是否为空。 GetHead(L) 取头。取广义表L的头。 GetTail(L) 取尾。取广义表L的尾。 InsertFirst(L,e) 插入元素。插入元素e作为广义表L的第一元素。 广义表与其他数据结构的关系 1 与线性表的关系 当限定广义表的每一项只能是基本元素而非子表时,广义表就退化为线性表:(a1,a2,…,an); 2 与二维数组的关系 当将数组的每行(或每列)看作为子表时,数组即为一个广义表: ((a11,a12,…,a1n),(a21,a22,…,a2n),…(an1,an2,…,ann)) 3 与树的关系 树也可以用广义表来表示,例如图7.1所表示的树可以用如下的广义表来表示: (a,(b,c,d),e,(f,g)) 4. 在LISP语言中,使用函数嵌套的形式来构造程序。例如:( op(op A B)(op C D)) 在这种情形下,程序本身就是一个广义表。 存储方式:头尾表示法 二类节点 表节点 元素节点 typedef char Tatom ; struct GListNode {int tag; union {Tatom data; GListNode *hp; }; GListNode *tp; }; 存储方式

文档评论(0)

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

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

1亿VIP精品文档

相关文档