1.題目描述
已知一維數組A[m+n]中依次存放兩個線性表()和()。將數組中兩個順序表的位置交換,即將()放在()前面。編程解決該問題。
2.算法思想
這個想法來源於線性代數。 = 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