目录
1.王道代码题:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表
其他-王道数据结构算法题-顺序表题,如下:
顺序表-删除所有值为x的数据元素+删除值在给定值s与t之间的所有元素
1.王道代码题:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表
代码实现:
扫描二维码关注公众号,回复:
14318407 查看本文章

//合并有序线性表
#include<iostream>
using namespace std;
#define Max 50
struct sqlist{
int data[Max];
int length;
};
bool verge(sqlist a,sqlist b,sqlist &c)
{
if(c.length<a.length+b.length) return false;
int i=0,j=0,k=0;
while(i<a.length&&j<b.length)
{
if(a.data[i]<=b.data[j]) c.data[k++]=a.data[i++];
else c.data[k++]=b.data[j++];
}
while(i<a.length)
{
c.data[k++]=a.data[i++];
}
while(j<b.length)
{
c.data[k++]=b.data[j++];
}
c.length=a.length+b.length;
return true;
}
int main()
{
sqlist a={
{2,3,4,6,7},5};
sqlist b={
{3,4,4},3};
sqlist c;
c.length=8;
int i;
for(i=0;i<a.length;i++) cout<<a.data[i]<<" ";
cout<<endl;
for(i=0;i<b.length;i++) cout<<b.data[i]<<" ";
cout<<endl;
if(!verge(a,b,c)) cout<<"合并错误"<<endl;
else{
for(i=0;i<c.length;i++){
cout<<c.data[i]<<" ";
}
cout<<endl;
}
return 0;
}
2.王道代码题:已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3,...,am)和(b1,b2,b3,...,bn)。编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,b3,...,bn)放在(a1,a2,a3,...,am)的前面。
代码实现:
//线性表前后互换
//123 4567
#include<iostream>
using namespace std;
#define Max 50
struct sqlist{
int a[Max];
int length;
};
void reverse(sqlist &L,int left,int right)
{
for(int i=left;i<=(right+left)/2;i++)
{
int t=L.a[i];
L.a[i]=L.a[right+left-i];
L.a[right+left-i]=t;
}
}
void prin(sqlist L)
{
for(int i=0;i<L.length;i++) cout<<L.a[i]<<" ";
cout<<endl;
}
void change(sqlist &L,int m,int n)
{
cout<<"整个逆置:"<<endl;
reverse(L,0,m+n-1);
prin(L);
cout<<"前n个逆置"<<endl;
reverse(L,0,n-1);
prin(L);
cout<<"后m个逆置即最终结果"<<endl;
reverse(L,n,m+n-1);
prin(L);
}
int main()
{
sqlist L={
{1,2,3,4,5,6,7},7};
change(L,3,4);//m 123 n 4567
return 0;
}