数据结构

广义表

数据结构中,广义表是一种比较重要的结构,至少在我看来

typedef struct lnode
{
    int tag;
    union
    {
        char data;
        struct lnode*sublist;
    }val;//联合体存储结构
    struct lnode *link;
}GLNode;

GLNode *CreatGL(char *&s)
{
    GLNode *g;
    char ch = *s++;//后置++的意思是先*s然后再++
    if (ch != '\0')
    {
        g = (GLNode *)malloc(sizeof(GLNode));
        if (ch == '(')
        {
            g->tag = 1;//新节点作为表头节点
            g->val.sublist = CreatGL(s);//递归构造子表并链接到表头节点
        }
        else if (ch == ')')
            g = NULL;
        else if (ch == '#')
            g = NULL;//这一行代码貌似没啥用,
        else
        {
            g->tag = 0;
            g->val.data = ch;
        }
    }
    else
        g = NULL;
    ch = *s++;
    if (g != NULL)
        if (ch == ',')
            g->link = CreatGL(s);
        else
            g->link = NULL;
    return g;
}

更新一下,上面的代码除了一点点问题,原因就是那几个ifelse if
写了半天才发现这个问题,惭愧2333

不过这个递归的过程确实很值得学习,广义表本身就是一种递归形式的表格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值