數據結構-順序表8

1.題目描述

已知一維數組A[m+n]中依次存放兩個線性表(a1,a2,...,Ama_1,a_2,...,A_m)和(b1,b2,...,bnb_1,b_2,...,b_n)。將數組中兩個順序表的位置交換,即將(b1,b2,...,bnb_1,b_2,...,b_n)放在(a1,a2,...,Ama_1,a_2,...,A_m)前面。編程解決該問題。

2.算法思想

這個想法來源於線性代數。(ATBT)T(A^TB^T)^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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章