- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.4 广义表的定义及其操作 约定:大写字母A~Z为表名,小写字母 a~z为单元素。 A=() —— 空表,表长=0,无表头、表尾 B=(a, b) —— 线性表 (广义表特例), 表长=2, head(B)=a, tail(B)=(b) C=(e, B) —— 表长=2,head(C)=e, tail(C)=(B)=((a,b)), 即 C = (e, (a, b)) D=(A, B, C) —— 表长=3,head(D)=A=(), tail(D)=(B,C)=((a, b), (e, (a, b))) E=(a, E) ——表长=2,head(E)=a, tail(E)=(E), 实际上表E为 (a, (a, (a, ...))), 是一个特殊的广义表,称为递归表,或无限表。 5.4 广义表的定义及其操作 广义表的特点: 1)嵌套:表中套表。 B a b C e B a b 2)共享:表可以是其它表的子表, 或表的元素取自其他的表。 D A B C a b e ^ E a 3)递归:表元素可以是表自己。 一般采用链表,称为广义链表 5.5 广义表的存储结构 1.单链表示法 atom data/link next 元素di的节点形式: 0 当di为原子时 atom = 1 当di为子表时 data 当atom=0时 data/link = link 当atom=1时 next指向下一个元素节点di+1 为便于处理,引入广义表的头节点: atom=1; data/link取link,指向首个元素节点d0;next=NULL 1 ^ 节点描述: 5.5 广义表的存储结构 typedef struct node { int atom; union { datatype data; struct node *link; } dtype; struct node *next; }Lsnode, *Lslink; 例: 5.5 广义表的存储结构 1 ^ ^ A A=() 0 a 0 b ^ 1 ^ B B=(a,b) 0 e 1 ^ 1 ^ C C=(e,B) 1 1 ^ 1 ^ 1 ^ D D=(A,B,C) 0 a 1 ^ 1 ^ E E=(a,E) 5.5 广义表的存储结构 2.双链表示法 link1 data link2 元素di的节点形式: 指向子表的指针 当di为子表时 link1 = ^ 当di为原子时 表名 当di为子表时 data = 原子值 当di为原子时 link2指向下一个元素节点di+1 B A ^ C ^ D E ^ a ^ E B ^ e ^ C b ^ ^ a ^ A= ^ B 例: 5.5 广义表的存储结构 A=() B=(a, b) C=(e, B) D=(A, B, C) E=(a, E) 例 5.6 设职工工资的表头H: 5.5 广义表的存储结构 即H=(A, B, x),A=(a1,a2,a3),B=(b1,b2,b3)。H的双链结构: 工资收入A 扣除B 基本工资 岗位津贴 福利 房租 水电 其他 实发x a1 a2 a3 b1 b2 b3 B A H x ^ ^ a1 ^ a2 ^ a3 ^ ^ b1 ^ b2 ^ b3 ^ ^ 5.5 广义表的存储结构 3.求广义表深度的算法 深度:广义表括号的层数 例如: () —— 空表,深度=1 (a, b, c) —— 深度=1 (a, (b, c)) —— 深度=2 递归定义: 原子深度=0; 空表深度=1; 广义表深度 = max(各元素深度) + 1 5.5 广义表的存储结
文档评论(0)