5.4广义表的定义&5.5广义表的存储结构
来源:互联网 发布:网络语言大神什么意思 编辑:程序博客网 时间:2024/06/05 18:13
广义表是线性表的推广。
广义表一般记作LS=(α1,α2,...,αn)
n是它的长度αi可以是单个元素也可以说广义表,分别称为广义表LS的原子和子表。
当广义表LS非空时,称第一个元素α1为LS的表头(Head),其余元素组成的表(α2,α3...αn)是LS的表尾(Tail)
下面给出广义表的列子:
1.A=()-空表,长度为0
2.B=(e)-列表B只有一个原子e,B的长度为1.
3.C=(a,(b,c,d))-列表C的长度为2,两个元素分别是原子a和子表(b,c,d)
4.D=(A,B,C)-3个元素都是列表,子表是上面的ABC
5.E=(a,E)-这是一个递归的表,它的长度为2。E相当于一个无线的列表E=(a,(a,(a...)))。
下面给出广义表图D
5.5广义表的存储结构:
下面给出广义表的尾链表存储表示:
结构图如下:
代码如下:
#define AtomType inttypedef enum{ATOM,LIST}ELemTag;//ATOM==0:原子,LIST==1:子表typedef struct GLNode{ELemTag tag;//公共部分,用于区分原子结点和表结点union{AtomType atom;//atom是原子节点的值域,AtomType由用户定义struct{struct GLNode *hp, *tp;//ptr是表结点的指针域,ptr.hp和ptr.tp分别指向表头和表尾}ptr;};}*GList;
下面来分析下:enum 为枚举类型,这个的作用是:比如说我们的程序中处理问题时与星期几有关,可能要将星期一转换为数字1,星期二转换为数字2,一直到数字7,在不用enum关键字的情况下,可以使用define来定义,但是大家会觉得很麻烦,因为你要一个一个的定义,星期的还好说,只有7天,如果是月份呢,一年有12个月份,那就要写12个define,非常的不方面,如果利用enum的话就会非常的方便。
下面的union
关于union比较多,大家可以把他直接当成struct,如果想具体了解请点击下面的链接
http://blog.csdn.net/qq78442761/article/details/54985317
下面给出的这个图是刚刚上面说的ABCDE5个例子的存储结构:
1.A=()-空表,长度为0
2.B=(e)-列表B只有一个原子e,B的长度为1.
3.C=(a,(b,c,d))-列表C的长度为2,两个元素分别是原子a和子表(b,c,d)
4.D=(A,B,C)-3个元素都是列表,子表是上面的ABC
5.E=(a,E)-这是一个递归的表,它的长度为2。E相当于一个无线的列表E=(a,(a,(a...)))。
下面给出另一种节点结构的链表表示列表,图如下:
下面是代码:
#define AtomType inttypedef enum{ATOM,LIST}ELemTag;//ATOM==0:原子,LIST==1:子表typedef struct GLNode{ELemTag tag;//公共部分,用于区分原子结点和表结点union{//原子结点和表结点的联合AtomType atom;//原子结点的值域struct GLNode *hp;//表结点的表头指针};struct GLNode *tp;//相当于线性链表的next,指向下一个元素结点}*GList;//广义表类型GList是一种扩展的线性链表
图如下:1.A=()-空表,长度为0
2.B=(e)-列表B只有一个原子e,B的长度为1.
3.C=(a,(b,c,d))-列表C的长度为2,两个元素分别是原子a和子表(b,c,d)
4.D=(A,B,C)-3个元素都是列表,子表是上面的ABC
5.E=(a,E)-这是一个递归的表,它的长度为2。E相当于一个无线的列表E=(a,(a,(a...)))。
- 5.4广义表的定义&5.5广义表的存储结构
- 5.5 广义表的存储结构
- 广义表的定义
- 广义表的定义
- 广义表的存储结构(广义表的递归算法,复制广义表,求广义表的深度)
- 第九周:广义表的存储结构及基本运算
- p145 使用头链尾链存储结构 , 实现广义表的拷贝
- 广义表的定义及用法
- 广义表的定义及用法
- 广义表的定义及用法
- 广义表的两种存储表示
- 【数据结构】算法5.5-5.8 广义表的头尾链表存储结构
- 广义表的首尾链表存储结构和扩展线性链表存储结构
- 广义表的概念
- 广义表的实现
- 广义表的实现
- 广义表的用法
- 广义表的创建
- 【Dongle】【SSH】商品图片上传
- java第二天
- Java线程:volatile关键字
- grunt, gulp以及webpack概念和应用
- 将自定义对象作为元素存到arrarylist集合中,并去除重复元素
- 5.4广义表的定义&5.5广义表的存储结构
- Android使用UncaughtExceptionHandler捕获全局异常
- Java线程:新特征-线程池
- 常用SQL语句的整理
- Linux命令(1): chmod、chown、 chgrp命令
- python-django 模板
- [TPYBoard-Micropython之会python就能做硬件 1] 运行第一个脚本——点亮LED
- 微信技术总监讲大数据高并发系统架构
- QTableWidget表格