leiyahui

纸上得来终觉浅,绝知此事要躬行
广义表

一 广义表的定义

广义表又被称为列表(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)表可以递归:表中的元素可以是表的本身

 

posted on 2015-11-21 12:07  雷大叔  阅读(363)  评论(0)    收藏  举报