题目:
将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表
思路:把顺序表1和顺序表2相比较,较小的一个存入顺序表3。没有比较完的直接加在顺序表3后。
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxsize 100
struct sqlist{
int data[maxsize];
int length;
};
bool mergelist(sqlist l,sqlist s,sqlist &t){
if(l.length+s.length>maxsize)
return false;
int i=0;
int j=0;
int k=0;
while(i<l.length && j<s.length){
if(l.data[i]<=s.data[j]){
t.data[k]=l.data[i];
i++;}
else{
t.data[k]=s.data[j];
j++;}
k++;
}
while(i<l.length){
t.data[k]=l.data[i];
i++;
k++;
}
while(j<s.length){
t.data[k]=s.data[j];
j++;
k++;
}
t.length=l.length+s.length;
return true;
}
int main(){
sqlist l={{1,2,3},3};
sqlist s={{2,3,4},3};
sqlist t;
cout<<"原来的线性表1顺序:"<<" ";
for(int i=0;i<l.length;i++) cout<<l.data[i];
cout<<endl;
cout<<"原来的线性表2顺序:"<<" ";
for(int i=0;i<s.length;i++) cout<<s.data[i];
cout<<endl;
if(mergelist(l,s,t)){
cout<<"现在的顺序:"<<" ";
for(int i=0;i<t.length;i++) cout<<t.data[i];
cout<<endl;
}
return 0;
}