广义表的成分可以是单元素,也可以是有结构的表。线性表是一种特殊的广义表,但广义表不一定是线性表,也不一定是线性结构。
广义表的基本运算:
(1)求表头GetHead(L):非空广义表的第一个元素,可以是一个单元素,也可以是一个子表
(2)求表尾GetTail(L):非空广义表除去表头元素以外其它元素所构成的表。表尾一定是一个表
例题:A=(a,b,(c,d),(e,(f,g))),
GetHead(GetTail(GetHead(GetTail(GetTail(A))))) 结果为?(答案:d)
过程:
tail第一步: (b,(c,d),(e,(f,g)))
tail第二步:((c,d),(e,(f,g)))
head第三步:(c,d)
tail第四步:(d)
head第五步:d
广义表特点:
- 有次序性 一个直接前驱和一个直接后继
- 有长度 =表中元素个数
- 有深度 =表中括号的重数
- 可递归 自己可以作为自己的子表
-
可共享 可以为其他广义表所共享
广义表计算举例
广义表的图形表示:(图中○表示广义表,□表示原子)
广义表的图形表示
广义表的存储:
因为广义表的数据元素可以是不同结构,所以难以用顺序存储,通常用链式存储的方式。广义表的链式存储又包括头尾链表和扩展线性链表两种。
表结点包括三个域:标志域、指示表头指针域和指示表尾指针域。
原子结点包括两个域:标志域和值域。