设线性表A=(a1,a2,…,am),B=(b1,b2,…,bn),试写一个按下列规则合并A,B为线性表C的算法,即使得C=(a1,b1…,am,bm,bm+1,…,bn)当mn时.(n,m,+1均为下标的,由于受限只能这样了.解:// 将合并后的结果放在C

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 10:37:29
设线性表A=(a1,a2,…,am),B=(b1,b2,…,bn),试写一个按下列规则合并A,B为线性表C的算法,即使得C=(a1,b1…,am,bm,bm+1,…,bn)当mn时.(n,m,+1均为下标的,由于受限只能这样了.解:// 将合并后的结果放在C

设线性表A=(a1,a2,…,am),B=(b1,b2,…,bn),试写一个按下列规则合并A,B为线性表C的算法,即使得C=(a1,b1…,am,bm,bm+1,…,bn)当mn时.(n,m,+1均为下标的,由于受限只能这样了.解:// 将合并后的结果放在C
设线性表A=(a1,a2,…,am),B=(b1,b2,…,bn),试写一个按下列规则合并A,B为线性表C的算法,即使得
C=(a1,b1…,am,bm,bm+1,…,bn)当mn时.(n,m,+1均为下标的,由于受限只能这样了.
解:
// 将合并后的结果放在C表中,并删除B表
Status ListMerge_L(LinkList &A,LinkList &B,LinkList &C)
{
LinkList pa,pb,qa,qb;
pa=A->next;
pb=B->next;
C=A;
while(pa&&pb){
qa=pa;qb=pb;
pa=pa->next;pb=pb->next;
qb->next=qa->next;
qa->next=qb;
}
if(!pa)qb->next=pb;
pb=B;
free(pb);
return OK;
}
while(pa&&pb){是作什么用的啊,好像也起不了循环的作用,
if(!pa)qb->next=pb;
pb=B;
free(pb);
return OK;是什么意思,怎么解释?请高手帮忙一下,解决后绝对采纳,从未食言,

设线性表A=(a1,a2,…,am),B=(b1,b2,…,bn),试写一个按下列规则合并A,B为线性表C的算法,即使得C=(a1,b1…,am,bm,bm+1,…,bn)当mn时.(n,m,+1均为下标的,由于受限只能这样了.解:// 将合并后的结果放在C
估计你是写错了LinkList pa,pb,qa,qb; 应该是 LinkList *pa,*pb,*qa,*qb;
Status ListMerge_L(LinkList &A,LinkList &B,LinkList &C)
{
\x09LinkList *pa,*pb,*qa,*qb;
\x09pa=A->next; //pa指向A的第二个节点,估计第一个节点没数据
\x09pb=B->next; //pb指向B的第二个节点
\x09C=A;
\x09while(pa&&pb){ //这个while就是循环啊,直到pa或pb指向NULL
\x09\x09qa=pa;\x09
\x09\x09qb=pb;
\x09\x09pa=pa->next; //pa指向下一个节点
\x09\x09pb=pb->next; //pb指向下一个节点
\x09\x09qb->next=qa->next; //创建新链表在qb节点后面插入qa节点
\x09\x09qa->next=qb; //qa后面插入qb节点
\x09}
\x09//if(!pa)qb->next=pb; //应该写错了吧.
\x09//pb=B;
\x09if(!pa)qb->next=pa; //如果B比A短,B最后一个节点的next指针指向A剩下的
\x09if(!pb)qa->next=pb; //如果A比B短,A最后一个节点的next指针指向B剩下的
\x09free(pb);
\x09return OK; //OK应该是你前面宏定义的吧,估计是#define OK 1
}