#include"a.h"
void main()
{
char p[80];
GList l,m;
HString t;
InitString(&t);
InitGList(&l);
InitGList(&m);
Status Eflag;
int x;
int d;
do
{
Eflag=TRUE;
do
{
system("cls");
printf("\n***************************************************");
printf("\n1:建立空广义表");
printf("\n2:由字符串建立广义表");
printf("\n3:退出 ");
printf("\n***************************************************");
printf("\n请选择功能:");
scanf("%d",&x);
switch(x)
{
case 1: if(InitGList(&l))
{
printf("\n建表成功!");
getch();
}
else
{
printf("\n建表失败!");
getch();
Eflag=FALSE;
}
break;
case 2: printf("\n请输入合法的广义表书写形式");
printf("\n格式如:(),(a,b),(a,(),b),(a,(c,d),f)");
printf("\n输入字符串:");
scanf("%s",&p);
StrAssign(&t,p);
if(CreateGList(&l,t))
{
printf("\n建表成功!");
getch();
}
else
{
printf("\n建表失败!");
getch();
Eflag=FALSE;
}
break;
case 3: printf("\n感谢使用本软件!");
getch();
exit(0);
default: printf("\n输入错误!请重新输入!");
getch();
}
}
while(x!=1&&x!=2||!Eflag);
do
{
Status Eflag=TRUE;
system("cls");
printf("\n***************************************************");
printf("\n1:复制广义表");
printf("\n2:求广义表长度");
printf("\n3:求广义表深度");
printf("\n4:判断广义表是不是空表");
printf("\n5:取广义表表头");
printf("\n6:取广义表表尾");
printf("\n7:头结点插入元素");
printf("\n8:删除第一个元素");
printf("\n9:遍历广义表");
printf("\n10:销毁广义表");
printf("\n11:退出");
printf("\n***************************************************");
printf("\n请选择功能:");
printf("\n请输入你要选择的功能:");
scanf("%d",&x);
switch(x)
{
case 1: if(CopyGList(&m,l))
{
printf("\n复制成功!");
getch();
}
break;
case 2: d=GListLength(l);
printf("\n广义表长度为:%d",d);
getch();
break;
case 3: d=GListDepth(l);
printf("\n广义表深度为:%d",d);
getch();
break;
case 4: if(GListEmpty(l))
{
printf("\n广义表是空表!");
getch();
}
else
printf("\n广义表不是空表!");
getch();
break;
case 5:DestroyGList(&m);
m=GetHead(l);
printf("\n广义表的表头为:");
Traverse_GL(m,visit);
getch();
break;
case 6:DestroyGList(&m);
m=GetTail(l);
printf("\n广义表的表尾:");
Traverse_GL(m,visit);
getch();
break;
case 7: printf("\n请输入要插入的元素:");
scanf("%s",&p);
StrAssign(&t,p);
CreateGList(&m,t);
if(InsertFirst_GL(&l,m))
{
printf("\n插入成功!");
printf("\n插入后的广义表为:");
Traverse_GL(m,visit);
}
else
printf("\n插入失败!");
getch();
break;
case 8: if(DeleteFirst_GL(&l,&m))
{
printf("\n删除成功!");
printf("\n删除的元素为:");
Traverse_GL(m,visit);
}
else
printf("\n删除失败!");
getch();
break;
case 9: Traverse_GL(l,visit);
printf("\n遍历完毕!按任意键继续.....");
getch();
break;
case 10: if(DestroyGList(&l))
{
printf("\n销毁成功!");
getch();
x=11;
Eflag=FALSE;
}
break;
case 11: break;
default: printf("\n输入错误,请重新输入!");getch();
}
}while(x!=11);
}while(Eflag);
printf("\n感谢使用本软件!");
getch();
}