广义表的概念及存储表示
Posted 薛定谔的猫ovo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了广义表的概念及存储表示相关的知识,希望对你有一定的参考价值。
广义表的概念
广义表的定义:广义表是 n ( n ≥ 0 ) n\\ (n≥0) n (n≥0) 个表元素组成的有限序列。
广义表的表示: L = e 1 , e 2 , . . . , e n L=\\e_1,\\ e_2,...,\\ e_n\\ L=e1, e2,..., en,其中
- L L L为表名
- e i e_i ei是表元素
- n n n是表长, n = 0 n=0 n=0是空表, n ≠ 0 n≠0 n=0是非空表
- “(” 和 ")"是表的分界符,不计入表的长度
广义表的表元素可以是不可再分的原子,还可以是广义表,称为广义表的子表。
广义表的特性
- 有次序:广义表的表元素的排列次序不能随意交换
- 有层次:广义表的表元素可以是子表,子表还可以有子表
- 有深度:最大嵌套层数即为广义表的深度,用括号重数来识别
- 可共享:广义表的子表可为多个广义表的子表
- 可递归:广义表的子表可以是自身
广义表的表头和表尾
- 广义表的表头:广义表的第一个表元素即为广义表的表头,它可以是原子,也可以是子表。
- 广义表的表尾:除第一个元素外的其他元素组成的表为广义表的表尾,它一定是广义表。
广义表的链接存储表示
广义表的表元素都是原子时退化为线性表,它的连接存储表示为单链表。
一般情况下,广义表的链接存储表示是双链表。
头尾表示法
双链表有两种结点:
- 表结点:代表广义表或子表,它的 h l i n k hlink hlink指针指向表头, t l i n k tlink tlink指向表尾,这是一种分支结点。
- 原子结点:用于存储数据,指向它的指针是 h l i n k hlink hlink,它是链尾的表结点,省去了收尾指针。
特别的,空表没有结点,指向它的指针为NULL。
例如,对于广义表
L
=
(
c
,
(
d
,
e
,
f
)
,
(
)
)
L=(c,(d,e,f),())
L=(c,(d,e,f),()),它的头尾存储表示如下:
扩展线性链表表示法
这种表示法不分表头和表尾。
双链表有两种结点:
- 表结点:它的 h l i n k hlink hlink指针指向该表的第一个表元素结点, t l i n k tlink tlink指针指向同一层下一个表元素结点。特别的,空表的 h l i n k hlink hlink和 t l i n k tlink tlink指针都为NULL。
- 原子结点:用于存储数据,有 t l i n k tlink tlink指针,指向同一层下一个表元素结点。
例如,对于广义表
L
=
(
c
,
(
d
,
e
,
f
)
,
(
)
)
L=(c,(d,e,f),())
L=(c,(d,e,f),()),它的扩展线性链表存储表示如下:
以上是关于广义表的概念及存储表示的主要内容,如果未能解决你的问题,请参考以下文章