将两个有序表合并成一个有序表,并从小到大排列
实现代码
void mergelist(sqlist &la,sqlist &lb, sqlist &lc)//合并线性表,并从小到排列
{
int i,j,k;
i = 0, j = 0, k = 0;
while (i < la.length && j < lb.length)
{
if (la.data[i] > lb.data[j])
{
lc.data[k] = lb.data[j];
j++, k++;
lc.length++;
}
else
{
lc.data[k] = la.data[i];
i++, k++;
lc.length++;
}
}
if (i < la.length)
for (; i < la.length; i++)
{
lc.data[k++] = la.data[i];
lc.length++;
}
if (j < lb.length)
for (; j < lb.length; j++)
{
lc.data[k++] = lb.data[j];
lc.length++;
}
}
全部运行如下
#include <iostream>
#include<string>
using namespace std;
typedef int elemtype;
typedef struct
{
elemtype *data;
int size;
int length;
}sqlist;
bool initlist(sqlist &l, int s = 100 )//初始化顺序表
{
if(s <= 0) s=100;
l.data=new elemtype[s];
if(l.data == NULL) return false;
l.size = s;
l.length = 0;
}
bool inslist(sqlist &l,int i, const elemtype e)//线性表第i个位置插入新元素e
{
if(i < 1 || i > l.length+1) return false;
if(l.size == l.length)
{
elemtype *temp = new elemtype[2*l.size];
if(temp == NULL) return false;
for(int i = 0;i < l.length ; i++)
temp[i] = l.data[i];
l.data = temp;
l.size = l.size * 2;
}
for(int k = l.length-1;k >= i-1;k--)
l.data[k+1] = l.data[k];
l.data[i-1] = e;
l.length++;
return true;
}//inslist
void displist(const sqlist &l)//遍历顺序表,输出所有元素
{
for(int i = 0;i < l.length; i++)
{
if(i>0)
cout<<" "<<l.data[i];
else cout<<l.data[i];
}
cout<<"\n";
}
void mergelist(sqlist &la,sqlist &lb, sqlist &lc)//合并线性表,并从小到排列
{
int i,j,k;
i = 0, j = 0, k = 0;
while (i < la.length && j < lb.length)
{
if (la.data[i] > lb.data[j])
{
lc.data[k] = lb.data[j];
j++, k++;
lc.length++;
}
else
{
lc.data[k] = la.data[i];
i++, k++;
lc.length++;
}
}
if (i < la.length)
for (; i < la.length; i++)
{
lc.data[k++] = la.data[i];
lc.length++;
}
if (j < lb.length)
for (; j < lb.length; j++)
{
lc.data[k++] = lb.data[j];
lc.length++;
}
}
int main()
{
int i,j,m,n;
sqlist la;
sqlist lb;
sqlist lc;
initlist(la);
initlist(lb);
initlist(lc);
cout<<"输入第一个顺序表的长度:\n";
cin>>m;
cout<<"输入第二个顺序表的长度:\n";
cin>>n;
cout<<"输入长度为"<<m<<"的有序表:\n";
for(i = 1; i <= m ; i++)
{
cin>>j;
inslist(la,i,j);
}
cout<<"输入长度为"<<n<<"的有序表:\n";
for(i = 1; i <= n ; i++)
{
cin>>j;
inslist(lb,i,j);
}
mergelist(la,lb,lc);
cout<<"合并后的有序表为:";
displist(lc);
return 0;
}
/**********end*********/