void DestroyGList(GList &L)
 { // 销毁广义表L
   GList q1,q2;
   if(L)
   {
     if(L->tag==LIST) // 删除表结点
     {
       q1=L->ptr.hp; // q1指向表头
       q2=L->ptr.tp; // q2指向表尾
       DestroyGList(q1); // 销毁表头
       DestroyGList(q2); // 销毁表尾
     }
     free(L);
     L=NULL;
   }
 }
void DestroyGList(GList1 &L)
{
	GList1 ph, pt;

	if (L) {
		if (L->tag)
			ph = L->hp;
		else
			ph = NULL;
		pt = L->tp;
		DestroyGList(ph);
		DestroyGList(pt);
		free(L);
		L = NULL;
	}
}
 void main()
 {
   char p[80];
   GList l,m;
   HString t; /* 与main5-51.c不同 */
   InitString(&t); /* 增加此句 */
   InitGList(&l);
   InitGList(&m);
   printf("空广义表l的深度=%d l是否空?%d(1:是 0:否)\n",GListDepth(l),GListEmpty(l));
   printf("请输入广义表l(书写形式:空表:(),单原子:a,其它:(a,(b),b)):\n");
   gets(p);
   StrAssign(&t,p);
   CreateGList(&l,t);
   printf("广义表l的长度=%d\n",GListLength(l));
   printf("广义表l的深度=%d l是否空?%d(1:是 0:否)\n",GListDepth(l),GListEmpty(l));
   printf("遍历广义表l:\n");
   Traverse_GL(l,visit);
   printf("\n复制广义表m=l\n");
   CopyGList(&m,l);
   printf("广义表m的长度=%d\n",GListLength(m));
   printf("广义表m的深度=%d\n",GListDepth(m));
   printf("遍历广义表m:\n");
   Traverse_GL(m,visit);
   DestroyGList(&m);
   m=GetHead(l);
   printf("\nm是l的表头,遍历广义表m:\n");
   Traverse_GL(m,visit);
   DestroyGList(&m);
   m=GetTail(l);
   printf("\nm是l的表尾,遍历广义表m:\n");
   Traverse_GL(m,visit);
   InsertFirst_GL(&m,l);
   printf("\n插入l为m的表头,遍历广义表m:\n");
   Traverse_GL(m,visit);
   printf("\n删除m的表头,遍历广义表m:\n");
   DestroyGList(&l);
   DeleteFirst_GL(&m,&l);
   Traverse_GL(m,visit);
   printf("\n");
   DestroyGList(&m);
 }
Exemple #4
0
 void DestroyGList(GList &L) // 广义表的头尾链表存储的销毁操作
 { // 销毁广义表L
   GList q1,q2;
   if(L)
   {
     if(L->tag==ATOM)
     {
       free(L); // 删除原子结点
       L=NULL;
     }
     else // 删除表结点
     {
       q1=L->ptr.hp;
       q2=L->ptr.tp;
       free(L);
       L=NULL;
       DestroyGList(q1);
       DestroyGList(q2);
     }
   }
 }
 void main()
 {
   char p[80];
   SString t;
   GList l,m;
   InitGList(&l);
   InitGList(&m);
   printf("空广义表l的深度=%d l是否空?%d(1:是 0:否)\n",GListDepth(l),GListEmpty(l));
   printf("请输入广义表l(书写形式:空表:(),单原子:(a),其它:(a,(b),c)):\n");
   gets(p);
   StrAssign(t,p);
   CreateGList(&l,t);
   printf("广义表l的长度=%d\n",GListLength(l));
   printf("广义表l的深度=%d l是否空?%d(1:是 0:否)\n",GListDepth(l),GListEmpty(l));
   printf("遍历广义表l:\n");
   Traverse_GL(l,visit);
   printf("\n复制广义表m=l\n");
   CopyGList(&m,l);
   printf("广义表m的长度=%d\n",GListLength(m));
   printf("广义表m的深度=%d\n",GListDepth(m));
   printf("遍历广义表m:\n");
   Traverse_GL(m,visit);
   DestroyGList(&m);
   m=GetHead(l);
   printf("\nm是l的表头元素,遍历m:\n");
   Traverse_GL(m,visit);
   DestroyGList(&m);
   m=GetTail(l);
   printf("\nm是由l的表尾形成的广义表,遍历广义表m:\n");
   Traverse_GL(m,visit);
   InsertFirst_GL(&m,l);
   printf("\n插入广义表l为m的表头,遍历广义表m:\n");
   Traverse_GL(m,visit);
   printf("\n删除m的表头,遍历广义表m:\n");
   DestroyGList(&l);
   DeleteFirst_GL(&m,&l);
   Traverse_GL(m,visit);
   printf("\n");
   DestroyGList(&m);
 }