广义表
数据结构中,广义表是一种比较重要的结构,至少在我看来
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;
}
更新一下,上面的代码除了一点点问题,原因就是那几个if
和else if
写了半天才发现这个问题,惭愧2333
不过这个递归的过程确实很值得学习,广义表本身就是一种递归形式的表格。