c语言广义表-创新互联
#include#include#includetypedef char DataType;
typedef struct GListNode
{
int tag;
union
{
DataType atom;//原子域
struct
{
struct GListNode *head;//头指针域
struct GListNode *tail;//尾指针域
}subList;//子表域
}val;
}GLNode;
void DecomposeStr(char str[],char hstr[])//拆分表头表尾
{
int i,j,tag,n=strlen(str);
char ch;
ch=str[0];tag=0;
for(i=0;i<=n-1;i++)
{
if(str[i]==','&&tag==1)
{
break;
}
ch=str[i];
if(ch=='(')
tag++;
if(ch==')')
tag--;
}
if(i<=n-1&&str[i]==',')
{
for(j=0;jtag=0;
h->val.atom=str[0];
}
else
{
h=(GLNode*)malloc(sizeof(GLNode));
h->tag=1;
DecomposeStr(str,hstr);
h->val.subList.head=CreatGList(hstr);
if(strcmp(str,"()")!=0)
{
h->val.subList.tail=CreatGList(str);
}
else
{
h->val.subList.tail=NULL;
}
}
return h;
}
int GListDepth(GLNode *h)
{
int max,dep;
GLNode *pre;
if(h==NULL)return 1;
if(h->tag==0)return 0;
pre=h;
for(max=0;pre!=NULL;pre=pre->val.subList.tail)
{
dep=GListDepth(pre->val.subList.head);
if(dep>max)max=dep;
}
return max+1;
}
int GListLength(GLNode *h)
{
int number=0;
GLNode *p;
for(p=h;p!=NULL;p=p->val.subList.tail)
number++;
return number;
}
int GListAtomNum(GLNode *h)
{
if(h==NULL)return 0;
else
{
if(h->tag==0)return 1;
else
{
return GListAtomNum(h->val.subList.head)+GListAtomNum(h->val.subList.tail);
}
}
}
GLNode *GListSearch(GLNode *h,DataType x)
{
GLNode *p;
if(h==NULL)return NULL;
if(h->tag==0&&h->val.atom==x)return h;
if(h->tag==1&&h->val.subList.head!=NULL)
{
p=GListSearch(h->val.subList.head,x);
if(p!=NULL)return p;
}
if(h->tag==1&&h->val.subList.tail!=NULL)
{
p=GListSearch(h->val.subList.tail,x);
if(p!=NULL) return p;
}
return NULL;
}
void DestroyGList(GLNode *h)
{
if(h==NULL)return;
if(h->tag==1&&h->val.subList.head!=NULL)
DestroyGList(h->val.subList.head);
if(h->tag==1&&h->val.subList.tail!=NULL)
DestroyGList(h->val.subList.tail);
free(h);
}
int main()
{
char str1[]="(((a,b,c),(d)),e)";
char str2[]="(((a,b,c),(d)),e)";
char hstr[100];
GLNode *h,*p;
int depth,number,length;
h=CreatGList(str1);
printf("广义表str1=%s",str2);
DecomposeStr(str2,hstr);
printf("\n表头=%s",hstr);
printf(" 表尾=%s",str2);
depth=GListDepth(h);
printf("\n深度depth=%d",depth);
length=GListLength(h);
printf("\n长度length=%d",length);
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
在古交等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、网站制作、成都外贸网站建设 网站设计制作按需开发网站,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站建设,成都外贸网站建设,古交网站建设费用合理。当前文章:c语言广义表-创新互联
新闻来源:http://hbruida.cn/article/dhccso.html