数据结构-顺序表8

1.题目描述

已知一维数组A[m+n]中依次存放两个线性表( a 1 , a 2 , . . . , A m a_1,a_2,...,A_m a1,a2,...,Am)和( b 1 , b 2 , . . . , b n b_1,b_2,...,b_n b1,b2,...,bn)。将数组中两个顺序表的位置交换,即将( b 1 , b 2 , . . . , b n b_1,b_2,...,b_n b1,b2,...,bn)放在( a 1 , a 2 , . . . , A m a_1,a_2,...,A_m a1,a2,...,Am)前面。编程解决该问题。

2.算法思想

这个想法来源于线性代数。 ( A T B T ) T (A^TB^T)^T (ATBT)T = BA。
就是先将A的顺序颠倒过来再将B的循序颠倒过来。然后再将整体的顺序颠倒过来。就可以实现从AB到BA的过程。

3.代码呈现

顺序表的基本结构和操作详见:https://blog.csdn.net/zfq17796515982/article/details/107140989

主要代码:

void reverse(SqList &L, int s, int e){ // 左闭右闭

    int mid = (s+e)/2;

    for(int i=s;i<=mid;i++){
        swap(L.data[i], L.data[s+e-i]);
    }

}

void f(SqList &L, int n, int m){

    reverse(L, 0, n-1);
    reverse(L, n, n+m-1);
    reverse(L, 0, n+m-1);

}


int main()
{
    SqList L;
    L.data = new ElemType[MaxSize];
    L.length = 0;
    int n, m;
    cin>>n>>m;  // 输入前一段和后一段的长度。
    for(int i=0;i<n+m;i++){
        ElemType c; cin>>c;
        ListInsert(L, i+1, c);
    }
    ListPrint(L);

    f(L, n, m);

    ListPrint(L);

    return 0;
}

4.运行结果

3 4
1 2 3 6 7 8 9
1 2 3 6 7 8 9
6 7 8 9 1 2 3
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值