广义表
一 广义表的定义
广义表又被称为列表(Lists),是线性表的推广,在线性表L(a0,a1,a2,a3,...an-1)中,ai是单个元素或者与原子,即ai本身不再是一个数据结构。
而广义表记为Ls(d0,d1,d2,...dn-1),式中di可以是一个原子也可以是另一张表。
若di为单原子则层di为LS的单元素,若di为表,则称di为Ls的子表。
二 广义表的抽象数据类型
ADT Lists
{
数据元素集:D={di|di belongs datatype or di belongs Lists(递归定义),i=0;i=1,i...}
数据关系集:R={<di,di+1>|di,di+1 belongs D,0<=i<=n-2}}
基本操作集:
ListInit(&L)
操作结果创建空的广义表L
ListCreate(&L,S)
初始条件:S是某结构广义表的串书写形式
ListsCopy(&L,T)
初始条件:广义表T存在
操作结果:将广义表T复制到广义表L上
ListLength(L)
初始条件:广义表存在
操作结果:返回广义表的长度
ListsDepth(L)
初始条件:广义表存在
操作结果:返回广义表的深度,即广义表的最大层数
ListEmpty(L)
初始条件:广义表存在
操作结果:如果广义表为空则返会true,否则返回false
GetHead(L)
初始条件:广义表存在
操作结果:返回广义表的头元素
GetTrail(L)
操作条件:广义表存在
操作结果:返回广义表的末尾元素
ListsInsert(&L,e)
初始条件:广义表L存在,且e belongs Datatype或者Lists
操作结果:将e作为头元素插在广义表L中
ListsDelete(&L)
初始条件:广义表L存在,
操作结果:删除广义表的头元素
ListsTravel(&L)
初始条件:广义表存在
操作结果:一次对广义表中的元素进行遍历
}
三 广义表的举例
约定大写字母A-Z为表名,小写字母a-z为单元素
A=()--空表,无表头,无表尾
B(a,b)--线性表(广义表的特例),表长为2,表头a,表尾b
C(e,B)--表长为2,head(C)=e,trail(C)=B=(a,b);
D(A,B,C)--表长为3,head(D)=A=()
E=(a,E)--表长=2,head(e)=a,tail(E)=(E),这个表是一个特殊的表,称为递归表或者无限表
四 从上例可以看出,广义表有以下特点
(1)表可以嵌套:表中的元素可以是一张表,称为子表
(2)表可以共享:一个表可以是其他表的子表
(3)表可以递归:表中的元素可以是表的本身
浙公网安备 33010602011771号