数据结构-广义表


什么是广义表

广义表:(a1,a2...,an)其中a1...an可以为单个数据元素,也可以为另一个广义表

例如:在Python中的列表就是一种广义表[[1,2,3],[1,1,1],2,3,[2,3,4]]


广义表数据结构定义

在这里插入图片描述

typedef struct gNode{
    struct gNode *next;
    //指向下一个元素或者下一个广义表
    
    int tag;
    //tag为0表示当前为单个数据元素,为1表示当前为子广义表    
    
    union{
        char data;
        struct gnode *slist;
    }val;
    //存放数据项,为节省类型使用union共用体,当单个节点时使用data域,子广义表时使用slist域
}gNode;

广义表的遍历

void traverse(gNode *p){
    if(!p) return;
    //如果节点为空,返回
    
    if(p->tag == 0) printf("%c ",p->val.data);
    //如果当前为单个数据元素,输出
    
    else traverse(p->val.slist);
    //如果当前为子表,遍历子表
    
    traverse(p->next);
    //遍历后继元素
}

求广义表长度

  • 广义表的长度,指的是广义表中所包含的数据元素的个数
  • 计算元素个数时,广义表中存储的每个原子算作一个数据,同样每个子表也只算作是一个数据
    • LS = {a1,a2,…,an} 的长度为 n;
    • 广义表 {a,{b,c,d}} 的长度为 2;
    • 广义表 { {a,b,c}} 的长度为 1;
    • 空表 {} 的长度为 0。
int GetLength(gNode *p){
    if(!p) return 0;
    //如果表为空 返回0
    
    int num = 0;
    for(gNode *q = p;q;q = q->next){
        num++;
    }
    return num;
}

求广义表最大深度

在这里插入图片描述
广义表的最大深度其实就是一个变形的括号匹配问题,记录匹配过程中栈的最大深度即为广义表的最大深度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kilig*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值