//浅浅复习一下
顺序表的基本操作我就不讲啦,这道题的话,就用两个指针,分别指向List A和List B,比较当前两个值的大小,把小的拿出来放进List C中,指针后移(那个指向大的指针不用动),一直循环,当List A或List B其中一个到达表尾时,就不用再比较了,把没到达表尾的那个顺序表依次取值放入List C即可。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define ElemType int
using namespace std;
typedef struct
{
int *elem;//存储空间的基地址
int length;//项的个数
}SqList;
int InitList(SqList &L)//线性表初始化
{
L.elem=new int[MAXSIZE];//分配一个MAXSIZE的存储空间
if(!L.elem)//分配失败
return ERROR;
L.length=0;//空表长度为0
return OK;
}
int GetElem(SqList &L,int i,int &e)//取值
{
if(i<1 || i>L.length)//i值不合法
return ERROR;
e=L.elem[i];
return OK;
}
int LocateElem(SqList &L,int e)//查找
{
for(int i=1;i<=L.length;i++)//我的数组从1开始
{
if(L.elem[i]==e)
return i;
}
return 0;
}
int Getlength(SqList &L)//取表长
{
return L.length;
}
int InsertList(SqList &L,int i,int e)//在第i个前插入,那么插入的这个就成了第i个
{
if(i<1 || i>L.length+1)//i值不合法
return ERROR;
if(L.length==MAXSIZE)//超过最大存储空间
return ERROR;
for(int j=L.length+1;j>i;j--)
{
L.elem[j]=L.elem[j-1];//往后移
}
L.elem[i]=e;//赋值插入
L.length++;//表长+1
return OK;
}
int DeleteList(SqList &L,int i,int &e)//删除
{
if(i<1 || i>L.length)//i值不合法
return ERROR;
e=L.elem[i];//返回第i个
for(int j=i;j<L.length;j++)
{
L.elem[j]=L.elem[j+1];//往前移
}
L.length--;//表长减一
return OK;
}
void hebing(SqList &LA,SqList &LB,SqList &LC)
{
std::ios::sync_with_stdio(false);
int i=1,j=1,k=1;
int LA_len,LB_len;
LA_len=Getlength(LA);//取表长
LB_len=Getlength(LB);
int ai,bj;
while(i<=LA_len && j<=LB_len)//如果LA和LB均未到达表尾
{
ai=LA.elem[i],bj=LB.elem[j];//取值
if(ai<=bj)//如果ai比bj小
{
InsertList(LC,k++,ai);//插入到LC中
i++;//i+1
}
else
{
InsertList(LC,k++,bj);
j++;
}
}
while(i>LA_len && j<=LB_len)//当LA到达了表尾,而LB还没到表尾时
{
//bj=GetElem(LB,j,bj);
bj=LB.elem[j];
InsertList(LC,k++,bj);
j++;
}
while(j>LB_len && i<=LA_len)
{
//ai=GetElem(LA,i,ai);
ai=LA.elem[i];
InsertList(LC,k++,ai);
i++;
}
cout << "List C:";
for(int m=1;m<k;m++)
{
cout << LC.elem[m] << ' ';
}
}
int main()
{
std::ios::sync_with_stdio(false);
SqList LA,LB,LC;
InitList(LA);
InitList(LB);
int n,m;
int a,b;
cin >> n;
int ai,bj;
for(a=1;a<=n;a++)
{
cin >> ai;
InsertList(LA,a,ai);
}
cout << "List A:";
for(a=1;a<=n;a++)
{
cout << LA.elem[a]<<' ';
}
cout << endl;
cin >> m;
for(b=1;b<=m;b++)
{
cin >> bj;
InsertList(LB,b,bj);
}
cout<< "List B:" ;
for(b=1;b<=m;b++)
{
cout << LB.elem[b]<<' ';
}
cout << endl;
InitList(LC);
hebing(LA,LB,LC);
return 0;
}