简单顺序表应用

来源:互联网 发布:java 泛型使用 编辑:程序博客网 时间:2024/04/29 17:18

简单顺序表应用


在书上做到一道比较有趣的题,这道题很难度不大,本算法复杂度O(m+n)。注意下标是从1开始的Orz。题目如下:    已知在一维数组A[m+n]中依次存放着两个顺序表(a1,a2,a3,……,am)和(b1,b2,b3,……,bn)。编出一个算法,将数组中两个顺序表    的位置互换,即将(b1,b2,b3,……,bn)放在(a1,a2,a3,……,am)的前面。
#include <iostream>using namespace std;#define ElemType int#define MAXSIZE 100typedef struct{    ElemType data[MAXSIZE];    int length;}SqList;void Exchange(SqList &A, int n, int m){    int i, j, temp;    while(m != n){        if(m < n){            for(i = n, j = m + n; j > n; i--, j--){                temp = A.data[i];                A.data[i] = A.data[j];                A.data[j] = temp;            }            n -= m;        }        else if(m > n){            for(i = n, j = m + n; i > 0; i--, j--){                temp = A.data[i];                A.data[i] = A.data[j];                A.data[j] = temp;            }            m -= n;        }    }    for(i = 1; i <= n; i++){        temp = A.data[i];        A.data[i] = A.data[n + i];        A.data[n + i] = temp;    }}int main(){    SqList L;    int i, n, m;    cin>>n>>m;    for(i = 1; i <= n + m; i++)        cin>>L.data[i];    for(i = 1; i <= n + m; i++)        cout<<L.data[i]<<' ';    cout<<endl;    Exchange(L, n, m);    for(i = 1; i <= n + m; i++)        cout<<L.data[i]<<' ';    cout<<endl;    return 0;}
0 0