1、定义线性表节点的结构,并定义节点的型和位置的型。
2、定义线性表的基本操作
3、在1,2的基础上,完成本题。
4、在main函数中进行测试:先构建两个有序的线性表,然后合并这两个线性表。
#include <iostream>
using namespace std;
#define maxsize 100
typedef int Elementtype;
struct List
{
Elementtype element[maxsize+1];
int last;
};
void Listini(List &L)
{
for(int i=1;i<=maxsize;i++)
{
L.element[i]=0;
}
L.element[0]=NULL;
L.last=0;
}
typedef Elementtype position;
position End(List L)
{
return (L.last+1);
}//返回last+1
void Insert(Elementtype x,position p,List &L)//把x插入到L表的P处
{
position q;
if(L.last>=maxsize-1)
cout<<"链表空间已满";
else if(p>L.last+1||p<1)
cout<<"选择的位置不存在";
else{
for( q=L.last;q>=p;q--)
L.element[q+1]=L.element[q];//将p位置后的元素向后移动一位
L.last=L.last+1;//last要调整
L.element[p]=x;
}
}
void Delete(position p,List &L)
{
position q;
if(p<1||p>L.last+1)
{
cout<<"选择的位置不存在";
}
else
{
for(q=p;q<L.last;q++)
{
L.element[q]=L.element[q+1];
}
L.last=L.last-1;
}
}
void prtList(List &L)
{
cout<<"链表的数据内容如下:"<<endl;
for(int i=1;i<=L.last;i++)
cout<<L.element[i]<<"\t";
cout<<endl;
}
List merList(List &L1,List &L2)
{
List L3;
Listini(L3);
L3.last=L1.last+L2.last;
int i=1;//链表一的第一个结点
int j=1;//链表二的第一个结点
int k=1;//待合并的链表第一个结点
while(i<L1.last&&j<L2.last)
{
if(L1.element[i]<L2.element[j])
{
L3.element[k]=L1.element[i];
i++;
k++;
}
else
{
L3.element[k]=L2.element[j];
j++;
k++;
}
}
while(i<=L1.last)
{
L3.element[k++]=L1.element[i++];
}
while(j<=L2.last)
{
L3.element[k++]=L2.element[j++];
}
return L3;
}
void main()
{
int x;
List L1,L2,L3;
Listini(L1);
Listini(L2);
Listini(L3);
cout<<"请输入五个数据来给第一个线性表赋值:"<<endl;
for(int i=0;i<5;i++)
{
cin>>x;
Insert(x,i+1,L1);
}
cout<<"请输入五个数据来给第e二个线性表赋值:"<<endl;
for(int j=0;j<5;j++)
{
cin>>x;
Insert(x,j+1,L2);
}
prtList(L1);
prtList(L2);
L3=merList(L1,L2);
prtList(L3);
system("pause");
}