数据结构5-广义表

广义表

一、基本概念

1.定义

广义表是一种不同构的线性结构: L S = ( α 0 , α 1 , ⋯   , α n ) LS=(\alpha_0,\alpha_1,\cdots,\alpha_n) LS=(α0,α1,,αn)
其中 L S LS LS表名 α i \alpha_i αi是表中元素,它可能是原子atom(数据元素),也可能是广义表。

2.术语

在这里插入图片描述

  • 表头:LS的第一个元素
  • 表尾:其余元素组成的表
  • 表长:最外层包含的元素的个数
  • 深度:所含括号的重数。原子的深度为0,空表的深度为1。

3.性质

  • 广义表实际是递归定义
  • 广义表中的元素可以是原子,也可以是子表。因此广义表是多层次结构。

二、广义表的头尾表示

需要两种节点:

  • 表节点:存广义表
  • 原子节点:存数据元素

注意:headlink指向表头,taillink指向表尾(注意表头是头元素,而表尾是余下的元素组成的表)

在这里插入图片描述
考虑到两种节点有公共的Tag元素,我们可以用一个联合(union)来表示。

typedef struct node {
	int tag;
	union {
		int atom;
		struct {
			struct node* headlink, * taillink;
		}pnode;
	};
}Node;

我们通过一张图了解一下广义表头尾表示。
在这里插入图片描述

三、广义表的扩展线性链表表示

我们依然需要原子节点和表节点这两种节点。但与先前不同的是,两个结构体有一些变动。
在这里插入图片描述
原子节点:data为数据,taillink指向同一层下一个元素(何为元素?前面说过,就是可能是原子,也可能是子表)
表节点:headlink指向下一层的表头,taillink指向同层下一个元素。

还是之前那个例子,我们看一下扩展线性链表的存储图示。
在这里插入图片描述
<四、广义表的层次链表表示法 挖个坑,一会填>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值