设计实现一个算法,用以对两个非递减有序表A、B进行合并,其中A=(2,5,8,9) ,B=(3,4,8,10,12,20)。
对两个表依次查找,例如以A表为主要目标,从B表中依次查找,因为两个表都是有序的,所以从B中的第一个元素开始,在A中从
第一个位置开始查找,只要A中元素比B的大就把B中的当前元素插到A中当前节点的上一个节点之后,就这样依次进行。某一个表查找完后
把没有查找完的表剩下的元素直接添加到另一表的后面就行了
#include <iostream>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
int InitList(LinkList &L){
L=new LNode;
L->next=NULL;
return 1;
}
void ListTraverse(LinkList &L){
LinkList p;
p=L->next;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int GreateList(LinkList &L, int n){
LinkList p,r;
L=new LNode;
L->next=NULL;
r=L;
while(n--){
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
return 1;
}
void MergeList(LinkList &LA,LinkList &LB,LinkList &LC){
LinkList pa,pb,pc;
pa=LA->next;
pb=LB->next;
LC=LA;
pc=LC;
while(pa && pb){
if(pa->data<=pb->data){
pc->next=pa;
pc=pa;
pa=pa->next;
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
delete LB;
}
int main()
{
LinkList LA,LB,LC;
int n;
InitList(LA);
InitList(LB);
cout<<"请输入表1的数据数目和数据:"<<endl;
cin>>n;
GreateList(LA,n);
cout<<"请输入表2的数据数目和数据:"<<endl;
cin>>n;
GreateList(LB,n);
MergeList(LA,LB,LC);
cout<<"合并之后为:"<<endl;
ListTraverse(LA);
return 0;
}