- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
表5-2 广义表及其示例 广 义 表 表长n 表深h A=() 0 1 B=(e) 1 1 C=(a,(b,c,d)) 2 2 D=(A,B,C) 3 3 E=(a,E) 2 ∞ F=(()) 1 2 a b e c d A B C D 图5-12 广义表的图形表示 有关广义表的这些概念的例子如表5-2所示。 * 广义表的重要结论: (1)广义表的元素可以是原子,也可以是子表,子表的元素又可以是子表 。即广义表是一个多层次的结构。 表5-2中的广义表D的图形表示如图5-12所示。 (2) 广义表可以被其它广义表所共享,也可以共享其它广义表。广义表共享其它广义表时通过表名引用。 (3) 广义表本身可以是一个递归表。 (4) 根据对表头、表尾的定义,任何一个非空广义表的表头可以是原子,也可以是子表, 而表尾必定是广义表。 * 由于广义表中的数据元素具有不同的结构,通常用链式存储结构表示,每个数据元素用一个结点表示。因此,广义表中就有两类结点: ◆ 一类是表结点,用来表示广义表项,由标志域,表头指针域,表尾指针域组成; ◆ 另一类是原子结点,用来表示原子项,由标志域,原子的值域组成。如图5-13所示。 只要广义表非空,都是由表头和表尾组成。即一个确定的表头和表尾就唯一确定一个广义表。 * 相应的数据结构定义如下: typedef struct GLNode { int tag ; /* 标志域,为1:表结点;为0 :原子结点 */ union { elemtype value; /* 原子结点的值域 */ struct { struct GLNode *hp , *tp ; }ptr ; /* ptr和value两成员共用 */ }Gdata ; } GLNode ; /* 广义表结点类型 */ 标志tag=0 原子的值 标志tag=1 表头指针hp 表尾指针tp 图5-13 广义表的链表结点结构示意图 (b) 表结点 (a) 原子结点 * 例: 对A=(),B=(e),C=(a, (b, c, d) ),D=(A, B, C),E=(a, E)的广义表的存储结构如图5-14所示。 A=NULL 1 ∧ 0 e B 1 0 a C 1 0 b 1 ∧ 1 0 c 1 ∧ 0 d D 1 ∧ 1 1 1 ∧ 1 0 a E 1 ∧ 图5-14 广义表的存储结构示意图 * 对于上述存储结构,有如下几个特点: (1) 若广义表为空,表头指针为空;否则,表头指针总是指向一个表结点,其中hp指向广义表的表头结点(或为原子结点,或为表结点) ,tp指向广义表的表尾(表尾为空时,指针为空,否则必为表结点)。 (2) 这种结构求广义表的长度、深度、表头、表尾的操作十分方便。 (3) 表结点太多,造成空间浪费。也可用图5-15所示的结点结构。 图5-15 广义表的链表结点结构示意图 (b) 表结点 (a) 原子结点 tag=1 表头指针hp 表尾指针tp tag=0 原子的值 表尾指针tp * ⑴ 什么是广义表?请简述广义表与线性表的区别? ⑵ 一个广义表是(a, (a, b), d, e, (a, (i, j), k)) ,请画出该广义表的链式存储结构。 ⑶ 设有二维数组a[6][8],每个元素占相邻的4个字节,存储器按字节编址,已知a的起始地址是1000,试计算: ① 数组a的最后一个元素a[5][7]起始地址; ② 按行序优先时,元素a[4][6]起始地址; ③ 按列序优先时,元素a[4][6]起始地址。 * 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 0 0 0 0 0 0 4 0 0 2 0 0 2 0 0 0 18 0 0 0 0 0 0 0 0 0 0 4 0 5 0 A= 0 0 -3 0 0 0 0 0 ⑷ 设A和B是稀疏矩阵,都以三元组作为存储结构,请写出矩阵相加的算法,其结果存放在三元组表C中,并分析时间复杂度。 ⑸ 设有稀疏矩阵A如下图所示,请画出该稀疏矩阵的三元组表和十字链表存储结构。 * * 在每个关系中,元素aj1j2…jn(0≦ji≦bi-2)都有一个直接后继。因此,就单个关系而言,这n个关系仍是线性表。 显然当n=1时, n维数组就退化为定长的线性表。反之, n维数组也可以看成是线性表的推广。 在经典算法中, 无论
文档评论(0)