数据结构

广义表

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

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

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

你可能感兴趣的:(数据结构)