65,211
社区成员
发帖
与我相关
我的任务
分享
GLNode *CreatGL ( char *&s)
{
GLNode *h;
char ch;
ch=*s;
s++;
if ( ch != '\0' )
{
h= (GLNode *)malloc (sizeof (GLNode));
h->link = NULL; ///默认置空,避免野指针,更常用的是memset(h,0x00,sizeof(GLNode));
if ( ch == '(' )
{
h->tag = 1;
h->val.sublist = CreatGL (s);
}
else if ( ch == ')' )
{
free(h); ///free避免内存泄漏
h = NULL;
}
else
{
h->tag = 0;
h->val.data = ch;
}
}
else
h = NULL;
if(NULL == h) ///NULL直接返回
return h;
ch = *s;
s++;
if ( ch != '\0' )
if ( ch == ',' )
h->link = CreatGL (s);
else
h->link = NULL;
//if ( h->link == NULL )
// return h;
return h; ///都要返回,不需要判断h->link
}
void DispGL ( GLNode *g)
{
if ( g != NULL)
{
if ( g->tag == 1)
{
cout <<"(";
if ( g->val.sublist == NULL )
cout <<" ";
else
DispGL ( g->val.sublist );
cout <<")"; ///()中间的是sublist,所以sublist输出前加(,输出后应加)
}
else
cout <<g->val.data;
if ( g->link != NULL)
{
cout <<",";
DispGL (g->link);
}
//')'与link不是同一层次的,不应该在这里输出
//else
// cout << ")";
}
}