大家帮忙看看啦、
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct node
{
int tag;//如果为1就为子表,0就为元素
union
{
char data;
struct node *sublist;//子表指针
}val;
struct node *link;//后继指针
}GLnode;
GLnode *CreatGL(char*s)//创建广义表
{
GLnode *h;char ch;//用一个广义表形式的字串参数S
h=NULL;
ch=*s;//取扫描字符
s++;//串指针下移一位
if(ch!='\0')
{
h=(GLnode *)malloc(sizeof(GLnode));//创建新节点
if(ch=='(')//当为左括号
{
h->tag=1;
h->val.sublist=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->link=CreatGL(s);//递归构造后续子表
else
h->link=NULL;//串结束,处理最后一个元素
return h;//返回指针
}
void DispGL(GLnode *g)
{
if(g!=NULL)
{
if(g->tag==1)
{
cout<<"(";
if(g->val.sublist==NULL)
cout<<")";
else
DispGL(g->val.sublist);
}
else
cout<<g->val.data;
if(g->tag==1)
cout<<")";
if(g->link!=NULL)
{
cout<<",";
DispGL(g->link);
}
}
}
int main()
{
char *L="((q,c,d),a,b,c,(d,e))";//这里只输出((q,c,d))??????????????问题来了
GLnode *H;
H=CreatGL(L);
DispGL(H);
system("pause");
}能帮我改一下算法么?急急急急急急急急