示例#1
0
Status CopyGList(GList &T, GList L) {  // 算法5.6
  // 采用头尾链表存储结构,由广义表L复制得到广义表T。
  if (!L) T = NULL;  // 复制空表
  else {
    if (!(T = (GList)malloc(sizeof(GLNode)))) // 建表结点
      return ERROR; 
    T->tag = L->tag;
    if (L->tag == ATOM) T->atom = L->atom;  // 复制单原子
    else { 
      CopyGList(T->ptr.hp, L->ptr.hp);
            // 复制广义表T->ptr.hp的副本L->ptr.hp
      CopyGList(T->ptr.tp, L->ptr.tp);
            // 复制广义表T->ptr.tp的副本L->ptr.tp
    } // else
  } // else
  return OK;
} // CopyGList
示例#2
0
 GList GetTail(GList L)
 { // 将广义表L的表尾生成为广义表,返回指向这个新广义表的指针
   GList t;
   if(!L) // 空表无表尾
     return NULL;
   CopyGList(t,L->ptr.tp); // 将L的表尾拷给t
   return t;
 }
示例#3
0
 GList GetHead(GList L)
 { // 生成广义表L的表头元素,返回指向这个元素的指针
   GList h,p;
   if(!L) // 空表无表头
     return NULL;
   p=L->ptr.hp; // p指向L的表头元素
   CopyGList(h,p); // 将表头元素复制给h
   return h;
 }
void CopyGList(GList1 &T, GList1 L)
{
	T = NULL;
	if (L) {
		T = (GList1)malloc(sizeof(GLNode1));
		if (!T)
			exit(OVERFLOW);
		T->tag = L->tag;
		if (L->tag == ATOM)
			T->atom = L->atom;
		else
			CopyGList(T->hp, L->hp);
		if (L->tp == NULL)
			T->tp = L->tp;
		else
			CopyGList(T->tp, L->tp);
	}
}
GList1 GetTail(GList1 L)
{
	GList1 t;

	InitGList(t);
	if (L->hp)
		CopyGList(t->hp, L->hp->tp);
	return t;
}
示例#6
0
 void CopyGList(GList &T,GList L)
 { // 采用头尾链表存储结构,由广义表L复制得到广义表T。算法5.6
   if(!L) // 复制空表
     T=NULL;
   else
   {
     T=(GList)malloc(sizeof(GLNode)); // 建表结点
     if(!T)
       exit(OVERFLOW);
     T->tag=L->tag;
     if(L->tag==ATOM)
       T->atom=L->atom; // 复制单原子
     else
     {
       CopyGList(T->ptr.hp,L->ptr.hp); // 递归复制子表
       CopyGList(T->ptr.tp,L->ptr.tp);
     }
   }
 }
示例#7
0
 GList GetTail(GList L)
 { // 取广义表L的尾
   GList t;
   if(!L)
   {
     printf("空表无表尾!\n");
     exit(0);
   }
   CopyGList(t,L->ptr.tp);
   return t;
 }
GList1 GetHead(GList1 L)
{
	GList1 h, p;

	if (!L->hp)
		return NULL;
	p = L->hp->tp;
	L->hp->tp = NULL;
	CopyGList(h, L->hp);
	L->hp->tp = p;
	return h;
}
示例#9
0
 Status CopyGList(GList &T,GList L)
 { // 采用头尾链表存储结构,由广义表L复制得到广义表T。算法5.6
   if(!L) // 复制空表
     T=NULL;
   else
   {
     T=(GList)malloc(sizeof(GLNode)); // 建表结点
     if(!T)
       exit(OVERFLOW);
     T->tag=L->tag;
     if(L->tag==ATOM)
       T->atom=L->atom; // 复制单原子
     else
     {
       CopyGList(T->ptr.hp,L->ptr.hp);
       // 复制广义表L->ptr.hp的一个副本T->ptr.hp
       CopyGList(T->ptr.tp,L->ptr.tp);
       // 复制广义表L->ptr.tp的一个副本T->ptr.tp
     }
   }
   return OK;
 }
示例#10
0
 GList GetHead(GList L)
 { // 取广义表L的头
   GList h,p;
   if(!L)
   {
     printf("空表无表头!\n");
     exit(0);
   }
   p=L->ptr.tp;
   L->ptr.tp=NULL;
   CopyGList(h,L);
   L->ptr.tp=p;
   return h;
 }
示例#11
0
 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);
 }
示例#12
0
 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);
 }