typedef char DataType;
typedef struct GLNode
{
int tag;
union
{
DataType data;
struct GLNode *hp;
}val;
struct GLNode *tp;
};
#include<stdio.h>
#include<stdlib.h>
typedef char DataType;
typedef struct GLNode
{
int tag;
union
{
DataType data;
struct GLNode* hp;
}val;
struct GLNode* tp;
}*GList;
int gldepth(GList g) {
int max = 0, dep;
if (0 == g->tag)
return 0;
g = g->val.hp;
if (NULL == g)
return 1;
while (g != NULL) {
if (1 == g->tag) {
dep = gldepth(g);
if (dep > max)
max = dep;
}
g = g->tp;
}
return max + 1;
}
int GLLenght(GList g)
{
int n = 0;
g = g->val.hp;
while (NULL != g)
{
n++;
g = g->tp;
}
return n;
}
GList GLCopy(GList p)
{
GList q;
if (NULL == p)
return NULL;
q = (GList)malloc(sizeof(GList));
q->tag = p->tag;
if (1 == p->tag)
q->val.hp = GLCopy(p->val.hp);
else
q->val.data = p->val.data;
q->tp = GLCopy(p->tp);
return q;
}
GList CreatGL(char* s)
{
GList h;
char ch;
ch = *s;
s++;
if ('\0' != ch)
{
h = (GList)malloc(sizeof(GList));
if ('(' == ch)
{
h->tag = 1;
h->val.hp = CreatGL(s);
}
else if (')' == ch)
{
h = NULL;
}
else
{
h->tag = 0;
h->val.data = ch;
}
}
else
h = NULL;
ch = *s;
s++;
if (h != NULL)
{
if (',' == ch)
{
h->tp = CreatGL(s);
}
else
{
h->tp = NULL;
}
}
return h;
}