广义表的运算
#include<stdio.h>
#include<stdlib.h>
typedef enum{atom,list}NodeTag;
typedef char DataType;
typedef struct GLnode{
NodeTag tag;
union{
DataType data;
struct GLnode * slink;
};
struct GLnode *link;
}GLNode,*Glist;
void CreatGList(Glist GL)
{
char ch;
scanf("%c",&ch);
if(ch!=' ')
{
if(ch=' ')
{
GL->tag=list;
GL->slink=(GLNode*malloc(sizeof(GLNode)));
GL->slink=CreatGList(GL->slink);
}
else
{
GL->tag=atom;
GL->data=ch;
}
}
else
GL=NULL;
scanf("%c",&ch);
if(GL!=NULL)
{
if(ch==',')
GL->link=(GLNode*) malloc(sizeof(GLNode));
GL->link CreatGList(GL->link);
}
else
GL->link=NUll;
}
void PrintGList(Glist GL)
{
if(GL!=NULL)
{
if(Gl->tag==list)
{
printf("(");
if(GL->slink==NULL) printf(" ");
else printGList(GL->slink);
}
else printf("%c",GL->data);
if(GL->tag==list)
printf(")");
if(GL->link!=NULL)
{
printf(",");
printGList(GL->link);
}
}
}
void FindGlistX(Glist GL,DataType x,int &mark)
{
if(GL!=NULL)
{
if(GL->tag==0 && GL->data==x)
{
p=GL;
mark=1;
}
else
if(GL->tag==1)
FindGlistX(GL->link,x,mark);
}
}
Glist head(Glist GL)
{
Glist p;
if(GL!=NULL && GL->tag!=0)
{
p=GL->slink;
p->link=NULL;
return p;
}
else
return NULL;
}
Glist tail(Glist GL)
{
Glist p;
if(GL!=NULL && GL->tag!=0)
{
p=GL->slink;
p=p->link;
GL->slink=p;
}
return p;
}
void depth(Glist GL,int &maxdh)
[
int h;
if(GL->tag==0) maxdh=0;
else
if(GL->tag==1 && GL->slink==NULL)
maxdh=1;
else
{
GL=GL->slink;
maxdh=0;
do{
depth(GL,h);
if(h>maxdh)maxdh=h;
GL=GL->link;
}while(GL!=NULL)
maxdh=maxdh+1;
}
]
Glist p;
int main(void)
{
int xz=1,mark=0;
char x;
Clist GL=NULL,GL1;
while(xz)
{
printf("***广义表的运算***\n");
printf("*================*\n");
printf("* 1 建立广义表 *\n");
printf("* 2 广义表查找 *\n");
printf("* 3 求广义表头 *\n");
printf("* 4 求广义表尾 *\n");
printf("* 5 求广义表深度*\n");
printf("* 0 退出表的运算*\n");
printf("*==================*");
printf(" 请选择:0-5 \n");
scanf("%d",&xz);
getchar();
switch(xz){
case 1:
printf("输入广义表:");
GL=(GLNode*)malloc(sizeof(GLNode));
GL=CreatGList(GL);
printf("\n");
prtinf("输出广义表:")
printGList(GL) ;
printf("\n\n");
break;
case 2:
printf("输入要查找的数据值(单个字符):");
scnaf("%c",&x);
mark-0;
FindGlistX(GL,x,mark);
if(mark)
printf("要查找的数据存在表中!\n\n");
else
printf("要查找的数据不在表中!\n\n");
break;
case 3:
printf("输入要求表头的广义表:");
GL=(GLNode*)malloc(sizeof(GLNode));
GL=CreatGList(GL);
GL1=head(GL);
printf("广义表的表头是:");
printGList(GL1);
printf("\n\n") ;
break;
case 4:
printf("输入要求表尾的广义表:");
GL=(GLNode*)malloc(sizeof(GLNode));
GL=CreatGList(GL);
GL!=tail(GL);
printf("(");
printGList(GL1);
printf(")");
printf("\n\n");
GL=NULL;
break;
case 5:
printf("输入要求深度的广义表");
GL=(GLNode*)malloc(sizeof(GLNode));
GL=CreatGList(GL);
depth(GL,mark);
printf("广义表的深度是:%5d\n\n",mark);
break;
default:
printf("再见!\n");
return;
}
}
}
推荐大家一个小巧轻便的C语言编译工具
点击连接