[题目分析] 广义表的元素有原子和表在读入广义表表达式时遇到左括号(就递归的构造子表否则若是原子就建立原子结点若读入逗号就递归构造后续子表若n=则构造含空格字符的空表直到碰到输入结束符号(#)设广义表的形式定义如下
typedef struct node
{int tag; //tag=为原子tag=为子表
struct node *link; //指向后继结点的指针
union {struct node *slink; //指向子表的指针
char data; //原子
}element;
}Glist;
Glist *creat ()//建立广义表的存储结构
{char ch; Glist *gh;
scanf(%c&ch);
if(ch==) gh=null;
else {gh=(Glist*)malloc(sizeof(Glist));
if(ch==(){gh>tag=; //子表
gh>elementslink=creat(); } //递归构造子表
else {gh>tag=;gh>elementdata=ch;} //原子结点
}
scanf(%c&ch);
if(gh!=null) if(ch==) gh>link=creat() //递归构造后续广义表
else gh>link=null;
return(gh);
}
}算法结束
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []