题目
将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。
代码如下:
#include <iostream>
using namespace std;
#define Elemtype int
#define maxsize 50
typedef struct Sqlist
{
Elemtype data[maxsize];
int length;
}Sqlist;
Sqlist In(Sqlist L)
{
L.length=0;
cout<<"请输入L数据个数"<<endl;
int n;
cin>>n;
cout<<"请输入L数据"<<endl;
int num;
for(int i=0;i<n;i++)
{
cin>>num;
L.data[i]=num;
L.length++;
}
return L;
}
void Out(Sqlist L)
{
cout<<"数据输出"<<endl;
for(int i=0;i<L.length;i++)
{
cout<<L.data[i]<<" ";
}
cout<<endl;
}
Sqlist combine(Sqlist L1,Sqlist L2)
{
int i,j;
j=0;
i=0;
while(i<L1.length)
{
if(L1.data[i]<L2.data[j])
{
i++;
cout<<"i="<<i<<"j="<<j<<endl;
cout<<L1.data[i]<<" "<<L2.data[j]<<endl;
}
else
{
if(L1.data[i]>L2.data[j])
{
int temp1;
temp1=L1.data[i];
L1.data[i]=L2.data[j];
L2.data[j]=temp1;
while(L2.data[j]>L2.data[j+1]&&j<L2.length-1)
{
int temp2;
temp2=L2.data[j];
L2.data[j]=L2.data[j+1];
L2.data[j+1]=temp2;
j++;
}
i++;
j=0;
}
}
}
for(int k=0;k<L2.length;k++)
{
L1.data[L1.length++]=L2.data[k];
}
return L1;
}
int main()
{
struct Sqlist L1;
struct Sqlist L2;
L1=In(L1);
L2=In(L2);
L1=combine(L1,L2);
Out(L1);
return 0;
}
总结:
1. 不得不说今天的代码写的很爽,在合并两个有序顺序表的基础
上空间复杂度降到了O(1),也就是在原L1顺序表上进行操作,
本菜鸡满满的成就感啊!
2. 可以看到这次的代码整体进行了封装,基本进行了模块化,省
了不少事,以后直接就可以Ctrl+c/v了,虽然前面几篇也好多是
cv的。
开心! 晚安!
明天见!!