版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022/7/246. 1 广义表的概念 定义:广义表是n(n=0)个元素a1,a2,an的有限序列,其中ai或者是原子或者是一个广义表。 GList = a1,a2,an | aiAtomSet或aiGList 原子结点 子表结点 2022/7/24例如: A = ( ) B = (a, b, c) C = (a, (b, c, d), e) D = (a, b), c, (d, (e, f), g) ) E = (a, ( ), ( ), ( ), b) L=(a, (a, b), (a, (a, b), c), ( ) 注意:( )、 ()是不同的。 线性表是广义表的特殊情况。 2022
2、/7/24 递归表:允许递归的表。 表的长度: 表中直接元素的个数. 表的深度: 表中嵌套的最大层次数。 表头: 第一个元素. 表尾: 除表头外剩下部分组成的广义表例如:A表的表头是( ),表尾是( );B表的表头是a,表尾是(b, c);C表的表头是a,表尾是( (b, c, d), e);D表的表头是(a b),表尾是(c, (d, (e, f), g) );E表的表头是a,表尾是( ( ), ( ), ( ), b)。2022/7/24 例: X = ( e ) Y = (a, (b, c, d) Z = (X, Y) R = (a, R) S = ( ( ) ) 请指出它们的深度、表头
3、、表尾。 2022/7/24广义表的基本操作 构造一个广义表 释放广义表空间 遍历广义表 复制广义表 求广义表的长度 求广义表的深度 求广义表的表头 求广义表的表尾2022/7/246.2 广义表的存储结构1. 基本思想: 使用链式存储结构(顺序难以表达数据元素的层次关系) 结点结构typeData/sublistnext2022/7/242. 类型定义:enum GListNodeType ATOM, LIST ;template struct GListNode GListNodeType type; union T data; GListNode *sublist; ; GListNod
4、e * next; ;2022/7/24举例: 约定广义表结构有“头结点” 头结点的type域值取LIST 2022/7/242022/7/24template class GList GListNode *head;public: GList(); GList(GList head, GList tail); / 利用表头、表尾构造对象 GList(GList &gl); GList( ); void Traverse( ); / 遍历算法 int Length( ); / 计算表的长度 int Depth( ); / 计算表的深度 ; 2022/7/24 6.3 广义表的基本操作算法 1.
5、 构造函数 2022/7/24template GList:GList(GList head, GList tail) head=new GListNode; / 创建表头结点 head-type=LIST; head-next=NULL; / 将表头的头结点作为第一个数据结点 head-sublist= head.head; / 将表尾第一个数据结点作为第二个数据结点 head.head-next = tail.head-sublist; delete tail.head; / 释放表尾的头结点 head.head=tail.head=NULL; 2022/7/242. 遍历广义表(递归)t
6、emplate void GList:Traverse(GListNode *p) cout sublist; p; p=p-next) if (p-type=ATOM) cout data ; else Traverse(p); cout ); template void GList:Traverse( ) Traverse(head ); 2022/7/243复制广义表 (递归)template GListNode *GList:Copy(GListNode* p) head=new GListNode; / 创建头结点 head-type=LIST; head-next=head-sub
7、list=NULL; / 复制原子结点、子表结点及其子表 for (p=p-sublist; p; p=p-next) newp=new GListNode; newp-type = p-type; if (p-type=ATOM) newp-data =p-data; else newp-sublist=Copy(p); / 复制子表结点及其子表 if (head-sublist=NULL) head-sublist=tail=newp; else tail-next=newp; tail=newp; 2022/7/24 tail-next=NULL; return head;templat
8、e GList:GList(GList &gl) head = Copy(gl.head); 2022/7/244求广义表的长度template int GList:Length() n=0; for (p=head-sublist; p; p=p-next) n+; return n;2022/7/245. 求广义表的深度算法(递归)depth(p)的递归定义为:1)递归终止条件: 当*p为原子时,depth(p)=0, 2)递归规律: depth(p) =1+ Max depth(ai)2022/7/24 template int GList:Depth(GListNode *p) if
9、(p-type=ATOM) return 0; maxdepth=0; for (q=p-sublist; q; q=q-next) depth=Depth(q); if (depthmaxdepth) maxdepth=depth; return maxdepth+1;2022/7/24template int GList:Depth() return Depth(head); 2022/7/246. 广义表的析构算法 (递归) template void GList:Free(GListNode *p) if (p=NULL) return; q=p; / q指向待释放结点 p=p-sublist; / p指向第一个结点 delete q; 2022/7/24while( p ) q=p; / q指向待释放结点 p=p-next; / p指向下一个结点 if (q-type=ATOM) de
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国铁路太原局集团有限公司高校毕业生招聘1195人(大专学历)考试笔试参考题库附答案解析
- 2025年延安市遴选公务员(33人)考试笔试模拟试题及答案解析
- 2025年厦门市校园招聘中小学幼儿园中职学校教师考试笔试备考试题及答案解析
- 2025江西吉安市吉水县吉阳产业发展有限公司及下属子公司面向社会招聘补充笔试考试参考题库及答案解析
- 肿瘤科胰腺癌手术康复指南
- 泌尿外科围手术期护理管理培训指南
- 消化内科胃癌术后康复计划
- 肾脏移植术后护理指南
- 2026年湖南省长沙市单招职业适应性测试题库新版
- 2026年烟台工程职业技术学院单招职业适应性测试题库必考题
- 部编版小学语文三年级上册第四单元作业设计
- 2025北京市公安局顺义分局勤务辅警、流动人口管理员招聘100人考试笔试模拟试题及答案解析
- 校园消防安全培训课件
- 2025-2026学年海南省海口市六年级语文上册期中考试试卷及答案
- 雨雪冰冻灾害现场处置标准操作
- 全文2025年《安全生产法》
- 2025年及未来5年中国体育赛事市场运行态势及行业发展前景预测报告
- 学生资助工作课题申报书
- 小学道德与法治新部编版二年级上册第四单元 我爱我们的祖国教案(2025秋) - 副本
- 室外消防管网施工方案
- 警犬喂养知识培训课件
评论
0/150
提交评论