您的位置:首页 > 其它

链式有序表合并

2015-11-22 22:44 274 查看
#include<stdio.h>
#include <conio.h>
#include<stdlib.h>
#include<iostream.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList LA,LB,LC;
void InitList(LinkList &L)
{
L=new LNode;
if(L==NULL)
{
cerr<<"存储分配错误!"<<endl;
exit(1);
}
L->next=NULL;
}
//前插法会影响结果
/*void CreateList_H(LinkList &L,int n)
{
L=new LNode;
L->next=NULL;
LNode *p;
for(int i=0;i<n;++i)
{
p=new LNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
}*/
void CreateList_R(LinkList &L,int n)
{/*后插法*/
L=new LNode;
L->next=NULL;
LNode *p;
LNode *r;
r=L;
for(int i=0;i<n;++i)
{
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC)
{
LNode *pa;LNode *pb;LNode *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;
}
void Output(LinkList &L)
{
while(L->next!=NULL)
{
cout<<L->next->data<<"  ";
L=L->next;
}
}
void main()
{
char ch;
int a,b;
LinkList LA,LB,LC;
InitList(LA);
InitList(LB);
InitList(LC);
do{
cout<<"请输入LA的长度:";
cin>>a;
cout<<"请按顺序输入LA的元素:";
CreateList_R(LA,a);
cout<<"请输入LB的长度:";
cin>>b;
cout<<"请按顺序输入LB的元素:";
CreateList_R(LB,b);
MergeList_L(LA,LB,LC);
Output(LC);
cout<<endl;
printf("是否继续?[y/n][y]");
while((ch=getchar())!='\n');
}while((ch=getchar())=='y'||ch=='\n');
}
void Exchang(LinkList &LA,LinkList &LC)
{
LNode *pa;LNode *pc;
pa=LA->next;
LC=LA;
pc=LC;
while(pa)
{
if(pa->data<=pa->next->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pa->next;
pc=pa->next;
pa=pa->next->next;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: