数据结构之广义表

1.广义表的定义

顾名思义,广义表是线性表的推广,也称为列表

 用大写字母表示广义表的名称,用小写字母表示原子

(l) A = ()----------A是一个空表, 其长度为零。

(2) B=(e)--------B 只有一个原子 e, 其长度为1。

(3) C= (a, (b, c, d))-------C的长度为2, 两个元素分别为原子 a 和子表(b,c, d)。

(4) D = (A, B, C)---------D的长度为3,3个元素都是广义表。显然,将子表的值代入后,则有
D = ((), (e), (a, (b, c, d))) 。

(5) E = (a, E)—这是一个递归的表, 其长度为2。E 相当千一个无限的广义表 E=(a, (a,(a, ···)))。

从上述定义和例子可推出广义表的如下3个重要结论。 

(1) 广义表的元素可以是子表,而子表的元素还可以是子表……由此,广义表是一个多层次
的结构,可以用图形象地表示。例如,图4.14表示的是广义表D, 图中以圆圈表示广义表以方块表示原子。 

 (2) 广义表可为 其他广义表所共享。例如在上述例子中,广义表A、 B 和 C为 D 的子表,
则在D中可以不必列出子表的值,而是通过子表的名称来引用。

(3) 广义表可以是一个递归的表,即广义表也可以是 其本身的一个子表。例如,表E 就是一
个递归的表。

由于广义表的结构比较复杂,其各种运算的实现也不如线性表简单,其中,最重要的两个运算如下。

(1) 取表头 GetHead(LS): 取出的表头为非空广义表的第一个元素,它可以是一个单原子,也 可以是一个子表。

(2) 取表尾 GetTail(LS): 取出的表尾为除去表头之外,由其余元素构成的表。即表尾一定是
一个广义表。

2.广义表的存储结构

         由于广义表中的数据元素可以有不同的结构(或是原子,或是列表),因此难以用顺序存储结 构表示,通常采用链式存储结构

1. 头尾链表的存储结构

        由于广义表中的数据元素可能为原子或广义表,由此需要两种结构的结点:一种是表结点, 用以表示广义表 一种是原子结点, 用以表示原子。从上节得知:若广义表不空,则可 分解成表头和表尾, 因此, 一对确定的表头和表尾可唯一确定广义表。

一个表结点可由3个 域组成:标志域、指示表头的指针域和指示表尾的指针域。

而原子结点只需两个域:标志域 和值域。如图4.15所示, 其中tag是标志域, 值为1时表明结点是子表, 值为0时表明结点是原子。

 

 2. 扩展线性链表的存储结构

在这种结构中, 无论是原子结点还是表结点均由三个域组成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值