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