交换两个线性表位置(或循环移动数组元素)

时间:2021-04-20 18:46:15

在一个数组中放入两个线性表,一前一后,交换两个线性表位置。这里使用一个线性表,前n个元素代表第一个线性表,后m个元素代表第二个线性表。

相当于把数组中元素循环左移n个,或者右移m个。

代码:

#include <stdio.h>
#define MAX 100
struct Sqlist{
    int data[MAX];
    int length;
}s;
void input(Sqlist *s) {
    printf("请输入元素个数:");
    scanf("%d",&s -> length);
    printf("请输入%d个元素:",s -> length);
    for(int i = 0;i < s -> length;i   ) {
        scanf("%d",&s -> data[i]);
    }
}
void print(Sqlist s) {
    printf("%dn",s.length);
    for(int i = 0;i < s.length;i   ) {
        printf("%d ",s.data[i]);
    }
    putchar(n);
}
void reverse_s(Sqlist *s,int l,int r) {
    while(l < r) {
        s -> data[l] ^= s -> data[r];
        s -> data[r] ^= s -> data[l];
        s -> data[l] ^= s -> data[r];
        l   ;
        r --;
    }
}
void swap_s(Sqlist *s,int n,int m) {
    reverse_s(s,0,n   m - 1);
    reverse_s(s,0,m - 1);
    reverse_s(s,m,n   m - 1);
}
int main() {
    input(&s);
    int n,m;
    printf("请输入n,m:");
    scanf("%d%d",&n,&m);
    swap_s(&s,n,m);
    print(s);
    return 0;
}