广义表求原子

来源:互联网 发布:印度 网络空间安全 编辑:程序博客网 时间:2024/06/05 03:35

整理自《数据结构教程》,这一段在书上的线性表章节。

广义表的存储结构:

用链接的存储结构表示广义表。可以用如下结点形式表示广义表的一个元素。

|Tag | data/Dlink | link

其中Tag是标识字段:tag=0表示原子,tag=1表示广义表(的子表)

Dlink/data是数据域:tag=0时,该字段是data,tag=1时,该字段是dlink,是指向子表的指针

link指针:指向下一个结点的指针,若没有下一个结点,则置空。

【例子】

(1)D=( ) //空表,长度0

(2)A=(a,(b,c)) //长度2,a元素,(b,c)线性表

(3)B=(A,A,()) //长度3,广义表A,A,空表

(4)C=(a,C) //长度为2的递归表,相当于C的无限表


【结论】

(1)一个广义表可以被其他广义表所共享。

(2)广义表可以递归。


【计算】

(1)head是取第一个元素,可以是子表也可以是原子,删去最外层括号。

(2)tail是取head之外的,除了第一个元素之外的,所有的元素,包括最外层的括号,保留!


【例子】

1、对广义表A=((a,b,c),(d,e,f))做运算head(tail(head(tail(A)))),结果是?

答案:e

步骤:

Step1:tail(A)=((d,e,f))

Step2:head(tail(A))=(d,e,f)

Step3:tail(head(tail(A)))=(e,f)

Step4:head(tail(head(tail(A))))=e


2、已知一个广义表B=(b,B,(b,B)),请画出它的存储结构,并写出其表长的值。


看图第一行,可以得出长度为3.


(求某表长度,数图中对应行有几个结点即可。比如图中可知B长度3,(b,B)长度2)