70,023
社区成员




#include <iostream>
using namespace std;
//------------广义表的头尾链表存储表示--------------
typedef enum{ATOM,LIST}Elemtag;//ATOM==0;原子,LIST==1;子表
typedef struct Glonde
{
Elemtag tag;//公共部分,区分原子结点和表结点
union a
{
char atom;//atom是原子结点的值域,(char)由用户定义
struct
{
struct Glonde *hp,*tp;
}ptr;//ptr是表结点的指针域,ptr.hp和ptr.tp分别指向表头和表尾
}a;//只有定义了变量才能对它进行用
}*Glist;//广义表类型
Glonde * Creatglist(char * &s)
{//返回指向广义表类型的指针
//用s所指向的字符串表示广义表
Glist p1,p2;
char ch;
s++;
ch=*s;
if(ch!=')')
{
p1=(Glist)malloc(sizeof(Glonde));//创建一个结点
p1->tag=LIST;//用于表示表结点
if(ch=='(')
{
p2=(Glist)malloc(sizeof(Glonde));//创建一个结点
p2->tag=LIST;
p1->a.ptr.hp=p2;
}
else
{
p2=(Glist)malloc(sizeof(Glonde));//创建一个结点
p2->tag=ATOM;
p2->a.atom=ch;
p1->a.ptr.tp=p2;
}
}//if(ch!=')')
s++;
ch=*s;
if(ch=='\0')
{
p1->a.ptr.tp=NULL;
}
else//if(ch==',')
Creatglist(s);
return p1;
}
void Showglist(Glist p)
{
if(p==NULL)
{
cout <<"此广义表为:"
<<"( )" <<endl;
}
else
{
cout <<"此广义表为:" <<"(";
if(p->a.ptr.hp->tag==LIST)
cout <<"(";
else
cout <<p->a.atom;
if(p->a.ptr.tp==NULL)
cout <<")";
else
cout <<",";
}
}
void main()
{
char *s;
Glist p;
s="(a.(b,c))";
p=Creatglist(s);
Showglist(p);
}