广义表相关总结

广义表相关总结

一.定义

广义表是线性表的推广,广义表中每个元素可以是原子,也可以是子表,原子即单个元素,而子表是广义表。我们可以发现,其实python中的数组就是一个广义表,其内元素可以是单个的元素,也可以是一个数组。

二.广义表的长度和深度

1.长度

广义表的长度就是看第一层所含的元素个数

2.深度

广义表的深度是max(每个元素深度) + 1

  • A=():A是一个空表,长度为0,深度为1
  • B=(e):B只有一个原子e,B的长度为1,深度为1
  • C=(a,(b,c,d)):C的长度为2,深度为2
  • D=(A,B,C)=((),(e),(a,(b,c,d))):D的长度为3,深度为3
  • E=(a,E):E是一个递归的表,长度为2,深度无限。

三.广义表的存储结构

1.头尾链表存储表示

a):首先,我们要知道一个概念,当广义表LS非空时,我们把第一个元素a1称为LS的表头,其余元素加上最外层的括号组成的表(a2,a3,a4,...,an)作为LS的表尾。我们可以发现,表头可能是原子也可能是表,但是表尾一定是表。

b):我们可以发现广义表中有两种不同的元素,所以我们可以定义两个不同的结点,表结点和原子结点来存储。

表结点,其中hp指向表头,tp指向表尾。

原子结点

c):例子
L=(a,(x,y),((x)))

1043829-20180604200100863-1121723641.png

2.子表存储表示

a):这种表示方法应该说更好理解一些,就是把表中每个元素分开来看,而不是从表头表尾去分析。

表结点,其中hp指向子表,tp指向下一个元素结点。

表结点,其中data是原子项的值,tp指向下一个元素结点。

b):例子
L=(a,(x,y),((x)))

1043829-20180604200107401-822584583.png

四.递归求广义表深度

int GListDepth(GList L){
    if(!L) return 1;//空表则返回1
    if(L->tag == 0) return 0;//原子项返回0
    for(max = 0, pp = L; pp; pp = pp->ptr.tp){//在元素间循环遍历
        dep = GListDepth(pp->ptr.hp);//获取每个子表深度
        if(dep > max) max = dep;//和最大的比较
    }
    return max + 1;//由于深度是每个元素深度+1.所以返回max+1
}

转载于:https://www.cnblogs.com/FZfangzheng/p/9135163.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值