收藏 分享(赏)

第五章 数组和广义表2.ppt

上传人:dcs1276 文档编号:4665537 上传时间:2019-01-06 格式:PPT 页数:16 大小:136.50KB
下载 相关 举报
第五章 数组和广义表2.ppt_第1页
第1页 / 共16页
第五章 数组和广义表2.ppt_第2页
第2页 / 共16页
第五章 数组和广义表2.ppt_第3页
第3页 / 共16页
第五章 数组和广义表2.ppt_第4页
第4页 / 共16页
第五章 数组和广义表2.ppt_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、第五章 数组和广义表,广义表,5.1 数组定义5.2 数组的顺序表示和实现5.3 矩阵的压缩存储 5.4 广义表定义5.5 广义表存储,第五章 数组和广义表,广义表是n(n0)个元素的有限序列,一般情况下,广义表记作 LS = (a1, a2, , an),A是广义表的名称 n是广义表的长度 ai (1in) 是单个元素(原子), 或者是广义表(子表),广义表是一个多层次的线性结构。 例如:,D = (E, F) E = (a, (b, c) F = (d, (e),A = ( ) B = (a, B) = (a, (a, (a, . , ) ) ) C = (A, D, F),对于广义表A中

2、的某个元素ai :若它是一个数据元素时, 称其为A的一个原子; 当其不是一个数据元素时, 则称它为广义表A的子表。,广义表举例如下: , B=(e) 广义表B只有一个原子e, B的长度为1。, A=( ) A是一个空表, 其长度为零。, C=(a, (b, c, d), 广义表C的长度为2, 两个元素分别为原子a和子表(b, c, d), D=(A, B, C), 广义表D的长度为3, 3 个元素都是广义表。,从以上例子可以看出: 广义表可以共享子表, 且允许递归。 广义表的元素之间除了存在次序关系外, 还存在层次关系。 任何一个非空广义表,其表头可能是原子, 也可能是广义表, 而其表尾必定为

3、广义表, E=(a, E), 这是一个递归的表, 其长度为2, E表相当于一个无穷表。,广义表中元素的最大层次为表的深度。元素的层次就是包含该元素的括号对的数目。例如: F=(a, b, (c, (d) ),其中, 数据元素a, b在第一层, 数据元素c在第二层, 数据元素d在第三层。广义表F的深度为3。,当广义表A非空时, 称第一个元素a1为A的表头(head),称其余元素组成的表(a2, , an)为A的表尾(tail)。,例如: 若 C=(a, (b, c, d) D=(A, B, C) 则:Head(D)=A Tail(D)=(B, C)Head(C)=a Tail(C)=(b, c,

4、 d),取广义表D的第二个元素,这些操作还可以嵌套调用:Head ( Tail(D) ) = Head(B,C) = B,注意:广义表 ( ) 和广义表( )不同。( ) 为空表,长度 n0 ,不能分解成表头和表尾。( ) 不是空表,其长度 n = 1 ,可以分解得到表头是空表( ) , 表尾是空表( ) .,5.1 数组定义5.2 数组的顺序表示和实现5.3 矩阵的压缩存储5.4 广义表定义 5.5 广义表存储,第五章 数组和广义表,广义表的存储结构由于广义表(a1, a2, , an)中的数据元素可以具有不同的结构(或是原子, 或是列表), 因此难以用顺序存储结构表示, 通常采用链式存储结

5、构。,表结点, 用以表示列表; 原子结点, 用以表示原子。,如何设定结点的结构?由于列表中的数据元素可能为原子或列表, 由此需要两种结构的结点:,因为:若广义表不空, 则可分解成表头和表尾; 所以: 一对确定的表头和表尾可唯一确定列表。,因此, 一个表结点可由 3 个域组成: 标志域、指示表头的指针域和指示表尾的指针域,而 原子结点只需两个域: 标志域和值域:,类型说明如下:typedef enum ATOM, LISTElemTag ; /*ATOM=0:原子LIST=1: 子表*/,枚举类型,define ATOM 0 define LIST 1 typedef enum 0, 1 Ele

6、mTag;,typedef struct GLNode ElemTag tag ;union AtomType atom ;struct struct GLNode *hp, *tp ; ptr ; *Glist ;,公共部分, 用于区分原子结点和表结点,原子结点和表结点的联合部分,ptr.hp和ptr.pt分别指向表头和表尾,广义表类型,原子结点的值域, A=( ) B=(e) C=(a, (b, c, d) D=(A, B, C) E=(a, E),Glist *A; A = NULL,1、设下三角矩阵A66,采用按列优先压缩存储,已知A00 的地址为2000,每个元素占2个单元,求A32 的存储地址。2、一个广义表为(a, ( a, b ), d, e, ( i, j ) , k ),则该广义表的长度和深度分别为多少?3、求出下列广义表运算的结果 head( ( p, h, w) ) head( ( ( a, b ) , ( c, d ) ) ) tail( ( ( a, b ) , ( c, d ) ) ) tail( head( ( ( a, b ) , ( c, d ) ) ) ),数组,数组ADT,数组存储,行优先,列优先,压缩存储,特殊矩阵,稀疏矩阵,对称矩阵,三角矩阵,对角矩阵,三元组顺序表,十字链表,广义表,表长,深度,表头,表尾,链式存储结构,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 统计图表

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报