else return 2; //此层次上的子表建完,返回2
}
return FALSE; //字符串错误
}//Creat
/*********************广义表共享*********************************/
GList Get(GList L,int I[]) //根据层次序号查找共享及被共享结点
{ int k,j; GList p;
k=0; p=L;
while(I[k]){
j=1;
while(jptr.tp;j++;}//根据层次序号的第一个数向表尾部走
k++;
if(I[k]) p=p->ptr.hp; //向表头部走
}
return p;
}
void Share(GList &L) //建立共享结构
{ GList p,q;
int I[10];int i; char ch;
do{ i=0;
cout<<"共享子表序号:"<
while(I[i]) cin>>I[++i];
p=Get(L,I); //p指向共享子表
i=0;
cout<<"被共享子表序号:"<
q=Get(L,I); //q指向被共享子表
p->ptr.hp=q->ptr.hp;p->ptr.tp=q->ptr.tp; //共享
cout<<"another (y/n)"; //若还有其余共享,输入y
cin>>ch;
}while(ch=='Y'||ch=='y'); //循环控制共享结点个数
}
/***********************打印广义表*****************************/
status PrintGList(GList L,int i)//打印广义表,i为空格数,初始为0
{ GList p,q;int k;
if(!L) {
for(k=0;k cout<<"#"<
if(L->tag==ATOM) {
for(k=0;k cout<
p=L;
for(k=0;k cout<
q=p->ptr.hp; //q指向第一个子表
PrintGList(q,i+2); //递归打印第一个子表,空格数增加
p=p->ptr.tp; //指针后移
}//while
return OK;
}//PrintGList