线性表二路归并
1.顺序表的归并
void mergearray(int a[],int m,int b[],int n,int c[]){ int i=0,j=0,k=0; while(i<m && j<n){ if(a[i] < b[j]){ c[k++]=a[i++]; }else{ c[k++]=b[j++]; } } while(i<m){ c[k++]=a[i++]; } while(j<n){ c[k++]=b[j++]; } }
2.单链表的归并
//归并顺序(类似尾插法) void mergeLinkList(LNode *head1,LNode *head2,LNode *&head3){ LNode *p=head1->next,*q=head2->next; LNode *r; head3=head1; head3->next=NULL; free(head2); r=head3; while(p!=NULL && q!=NULL){ if(p->data<q->data){ r->next=p; p=p->next; r=r->next; }else{ r->next=q; q=q->next; r=r->next; } } if(p!=NULL){ r->next=p; } if(q!=NULL){ r->next=q; } } //归并逆序(类似头插法) void mergeR(LNode *A,LNode *B,LNode *&C){ LNode *p=A->next; LNode *q=B->next; LNode *s; C=A; C->next=NULL; free(B); while(p!=NULL && q!=NULL){ if(p->data < q->data){ s=p; p=p->next; s->next=C->next; C->next=s; }else{ s=q; q=q->next; s->next=C->next; C->next=s; } } while(p!=NULL){ s=p; p=p->next; s->next=C->next; C->next=s; } while(q!=NULL){ s=q; q=q->next; s->next=C->next; C->next=s; } }