【王道数据结构编程题】- 两个有序顺序表合并 + 两个顺序表位置互换

目录

1.王道代码题:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表

2.王道代码题:已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3,...,am)和(b1,b2,b3,...,bn)。编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,b3,...,bn)放在(a1,a2,a3,...,am)的前面。


其他-王道数据结构算法题-顺序表题,如下:


顺序表-删除最小值元素+元素逆置

顺序表-删除所有值为x的数据元素+删除值在给定值s与t之间的所有元素

顺序表-删除值在给定值之间的元素+删除值重复的元素

顺序表-查找数值为x的元素+循环左移p个位置

顺序表-找出两个序列A和B的中位数+找出序列A的主元素

顺序表-找出未出现的最小正整数+三元组最小距离

1.王道代码题:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表

代码实现:

//合并有序线性表
#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;
}

猜你喜欢

转载自blog.csdn.net/m0_56051805/article/details/125363734