数据结构 广义表

前言

顾名思义,广义表就是线性表的拓展。通俗地理解,就是对于之前定义的线性表只能操作本表内的逻辑,而广义表拓宽了这个定义,于是能指向其他广义表,也就是说表与表之间建立起了联系。


概念

简单地概况广义表:表元素可以是原子也可以是一个广义表地线性表的拓展结构。

长度:最上层元素的个数,一个表可以指向其他广义表,此时其他广义表在本表中也抽象成一个元素;指向数据项也就是原子项,此时也为一个元素。

深度:其指向其他广义表的最大深度,因为其他广义表还可能再指向另外的广义表,此时求这个拓展的最大深度。注意,这里是最大深度!


定义

标记域:用于区分原子结点或者是广义表结点

数据域:用于存具体的数据

头指针域:用于指向其他广义表的指针

尾指针域:用于指向当前广义表的后继节点

原子结点

标记域+数据域

广义表结点

标记域+头指针域+尾指针域

Code

这边又两种方法,法一是不带头节点的,法二是带头节点的。

法一

typedef enum{ATOM, LIST}ElemTag; //ATOM == 0 原子;List == 1 广义表
typedef struct GLNode {
	ElemTag tag;
	union {
		AtomDataType data;
		struct {
			struct GLNode *hp, *tp;
		}ptr;
	};
} *GList;

法二

typedef enum{ATOM, LIST}ElemTag; //ATOM == 0 原子;List == 1 广义表
typedef struct GLNode {
	ElemTag tag;
	union {
		AtomDataType data;
		struct GLNode *hp;
	};
	struct GLNode *tp;
} *GList;

图示

A = NULL
B = (d, e)
C = (b, (c, d))
D = (B, C)

法一

在这里插入图片描述

法二

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胡同的诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值