一、实现过程
1.构造线性表
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L)
{//初始化
L=new LNode;
if(!L)exit(OVERFLOW);
L->next=NULL;
return OK;
}
2.赋值
void CreatList(LinkList &L,int N)
{//为线性表赋初值
int i;
LinkList p;
cout<<"请按逆序输入线性表中的元素值:"<<endl;
for(i=0;i<N;i++)
{
p=new LNode;
cin>>p->data ;
p->next =L->next ;
L->next =p;
}
}
3.遍历
void PrintfList(LinkList &L)
{
LinkList p;
p=L->next ;
while(p)
{
cout<<p->data <<" ";
p=p->next ;
}
cout <<endl;
}
4.归并
void MergeList(LinkList &LA,LinkList &LB,LinkList &LC)
{ //已知单链表LA和LB的元素按值非递减排列
//归并LA和LB得到新的单链表LC,LC的元素也按值非递减排列
LinkList pa,pb,pc;
pa=LA->next ;
pb=LB->next ;
LC=LA;
pc=LC;
while(pa&&pb)
{
//LA和LB都没有到达表尾,取较小的结点插入到LC的最后;
if(pa->data <=pb->data )
{
pc->next =pa;
pc=pb;
pa=pa->next ;
}
else
{
pc->next =pb;
pc=pb;
pb=pb->next ;
}
}
pc->next =pa?pa:pb;
delete LB;
}
5.完整代码
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define INITSIZE 100
#define OVERFLOW -1
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L)
{//初始化
L=new LNode;
if(!L)exit(OVERFLOW);
L->next=NULL;
return OK;
}
void CreatList(LinkList &L,int N)
{//为线性表赋初值
int i;
LinkList p;
cout<<"请按逆序输入线性表中的元素值:"<<endl;
for(i=0;i<N;i++)
{
p=new LNode;
cin>>p->data ;
p->next =L->next ;
L->next =p;
}
}
//合并线性表
void MergeList(LinkList &LA,LinkList &LB,LinkList &LC)
{ //已知单链表LA和LB的元素按值非递减排列
//归并LA和LB得到新的单链表LC,LC的元素也按值非递减排列
LinkList pa,pb,pc;
pa=LA->next ;
pb=LB->next ;
LC=LA;
pc=LC;
while(pa&&pb)
{
//LA和LB都没有到达表尾,取较小的结点插入到LC的最后;
if(pa->data <=pb->data )
{
pc->next =pa;
pc=pb;
pa=pa->next ;
}
else
{
pc->next =pb;
pc=pb;
pb=pb->next ;
}
}
pc->next =pa?pa:pb;
delete LB;
}
void PrintfList(LinkList &L)
{
LinkList p;
p=L->next ;
while(p)
{
cout<<p->data <<" ";
p=p->next ;
}
cout <<endl;
}
int main()
{
int N;
LinkList LA,LB,LC ;
LinkList pa,pb,pc;
if(InitList(LA))//初始的两个链子为LA和LB,最后归并到LC上
cout<<"LA初始化成功!"<<endl;
if(InitList(LB))
cout<<"LB初始化成功!"<<endl;
if(InitList(LC))
cout<<"LC初始化成功!"<<endl;
cout<<"请输入单链表LA中元素的个数:";
cin>>N;
CreatList(LA,N);
cout<<"请输入单链表LB中元素的个数:";
cin>>N;
CreatList(LB,N);
MergeList(LA,LB,LC);
cout<<"单链表LC中元素:"<<endl;
PrintfList(LC);
return 0;
}
这些代码是博主初学时写的代码,内容不够精炼简洁,还请多多包涵,希望他们对你写代码有所帮助!