/***************以下是广义表
//******单链表表示法***************
#define elemtype char
#include<stdio.h>
#include<malloc.h>
struct nodel
{
    int atom; //标志域,0表示子表,1表示原子
    struct nodel *link; //存放下一个元素的地址
    union
    {
        struct nodel *slink; //用来存放子表的指针
        char data; //用来存放原子值
    }ds;
};
void creat(nodel **LS); //建立广义表的单链表
void print(nodel *LS); //输出广义单链表
int depth(nodel *LS); //求广义表的深度
main()
{
    struct nodel *LS;
    int dep; //广义表的深度
    printf("创建广义表:\n");
    printf("请输入要创建的广义表的形式:\n");
    creat(&LS);
    printf("广义表形成的情况:\n");
    print(LS);
    printf(";\n");
    if(LS->ds.slink==NULL) //控制只有一个头结点时深度是1而不是2
        dep=1;
    else
        dep=depth(LS); //求广义表的深度
    printf("广义表的深度为:%d\n",dep);
}
void creat(nodel **LS) //建立广义表的单链表
{
    char ch;
    //printf("输入一个字符:");
    scanf("%c",&ch);  
    if(ch=='#')
        {
          (*LS)=NULL;
        }
    else if(ch=='(')
        {
          (*LS)=(struct nodel *)malloc(sizeof(struct nodel)); 
          (*LS)->atom=0;
          //getchar();
          creat(&((*LS)->ds.slink));
        }
    else
        {
          (*LS)=(struct nodel *)malloc(sizeof(struct nodel));
          (*LS)->atom=1;
          (*LS)->ds.data=ch;
        }
    //printf("输入一个字符:");
    //getchar();
    scanf("%c",&ch);
    if((*LS)==NULL);
    else if(ch==',')
        { 
          //getchar();
          creat(&((*LS)->link));
        }
    else if((ch==')')||(ch==';'))
        (*LS)->link=NULL;
}

void print(nodel *LS) //输出广义单链表
{
    int ok=1; //测试时,不能有输出或输入
    if(LS->atom==0)
        {
          ok=1; //测试用
          printf("(");
          if(LS->ds.slink==NULL)
            {
              ok=1;
              printf(" ");
            }
          else
              print(LS->ds.slink);         
        }
    else
        {
           ok=1;
           printf("%c",LS->ds.data);
        }
    if(LS->atom==0)
        {
            ok=1; 
            printf(")");
        }
    if(LS->link!=NULL)
        {
          ok=1;
          printf(",");
          print(LS->link);
        }
}

int depth(nodel *LS) //求广义表的深度
{
    int max=0;
    int t;
    while(LS!=NULL)
        {
          if(LS->atom==0)
            {
              int dep=depth(LS->ds.slink);
              if(dep>max)
                  max=dep;
              t=0; //用于测试
            }
          LS=LS->link;
        }
    return max+1;
}
//******单链表表示法***************
//***************以上是广义表
[em10][em10][em10][em10][em10][em14][em14][em14][em14][em16][em16][em16][em16][em16]