5.4广义表的定义&5.5广义表的存储结构
发布日期:2021-06-30 10:49:14 浏览次数:2 分类:技术文章

本文共 1615 字,大约阅读时间需要 5 分钟。

广义表是线性表的推广。

广义表一般记作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,如果想具体了解请点击下面的链接

                                                                                                                                                     

下面给出的这个图是刚刚上面说的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...)))。

转载地址:https://it1995.blog.csdn.net/article/details/54984776 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:联合体(union)的使用方法及其本质
下一篇:5.3稀疏矩阵的十字链表存储

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月28日 01时48分22秒