主题:关于广义表复制
严蔚敏版数据结构115页复制广义表的算法如下:
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); // 递归复制子表(a)
CopyGList(T->ptr.tp,L->ptr.tp);//(b)
}
}
}
我觉得以上程序存在问题.因为此程序中的复制操作仅仅复制节点的tag域与原子节点的值域,而对于表节点的hp域与tp域均没有复制.如果说hp域与tp域的复制是通过a语句与b语句复制的话,但是这两个语句均为递归调用,因此这两个语句并没有把hp域与tp域复制过去.因此我认为此程序中应该增加形如T->ptr.hp=L->ptr.hp与T->ptr.tp=L->ptr.tp的语句,请问我的说法正确吗?谢谢!1
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); // 递归复制子表(a)
CopyGList(T->ptr.tp,L->ptr.tp);//(b)
}
}
}
我觉得以上程序存在问题.因为此程序中的复制操作仅仅复制节点的tag域与原子节点的值域,而对于表节点的hp域与tp域均没有复制.如果说hp域与tp域的复制是通过a语句与b语句复制的话,但是这两个语句均为递归调用,因此这两个语句并没有把hp域与tp域复制过去.因此我认为此程序中应该增加形如T->ptr.hp=L->ptr.hp与T->ptr.tp=L->ptr.tp的语句,请问我的说法正确吗?谢谢!1