在一个数组中放入两个线性表,一前一后,交换两个线性表位置。这里使用一个线性表,前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; }