|  | 
 
| 
/*
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3,...,am)和(b1,b2,b3,...,bn),试编写一个函数,将数组中两个顺序表的位置互换,
 即将(b1,b2,b3,...,bn)放在(a1,a2,a3,...,am)的前面.
 
 */
 #include<stdlib.h>
 #include<stdio.h>
 #define MaxSize1 5
 #define MaxSize2 3
 #define ArraySize L1.length+L2.length
 typedef struct
 {
 int data[MaxSize1];
 int length;
 } SqList1;
 
 typedef struct
 {
 int data[MaxSize2];
 int length;
 } SqList2;
 
 //初始化
 void InitList1(SqList1 &L)
 {
 for(int i=0; i<MaxSize1; i++)
 {
 L.data[i]=0;
 
 }
 L.length=0;
 
 }
 
 void InitList2(SqList2 &L)
 {
 for(int i=0; i<MaxSize2; i++)
 {
 L.data[i]=0;
 
 }
 L.length=0;
 
 }
 //创立表
 void InputList1(SqList1 &L)
 {
 for(int i=0; i<MaxSize1; i++)
 {
 scanf("%d",&L.data[i]);
 L.length++;
 
 }
 
 }
 void InputList2(SqList2 &L)
 {
 for(int i=0; i<MaxSize2; i++)
 {
 scanf("%d",&L.data[i]);
 L.length++;
 
 }
 
 }
 
 
 //根据题目提供一个将数组中两个顺序表位置互换的函数
 void InverseArray(SqList1 L1,SqList2 L2)
 {
 int a[L1.length+L2.length];
 
 //将两个线性表放入数组
 for(int i=0; i<L1.length; i++)
 {
 a[i]=L1.data[i];
 
 }
 for(int j=L1.length; j<L1.length+L2.length; j++)
 {
 a[j]=L2.data[j-L1.length];
 }
 for(int i=0; i<ArraySize; i++)
 {
 printf("%d ",a[i]);
 }
 
 //ok,开始反转
 printf("\n");
 system("pause");
 printf("反转后的结果:\n");
 int m=L1.length;
 int n=L2.length;
 
 //当两个顺序表同样大时
 if(m==n)
 {
 int temp1;
 for(int i=0; i<m; i++)
 {
 temp1=a[i];
 a[i]=a[L1.length+i];
 a[L1.length+i]=temp1;
 }
 }
 
 
 //当L1<L2时
 if(m<n)
 {
 int temp2;
 //起始的时候还是先要照着相等的时候来
 for(int i=0; i<m; i++)
 {
 temp2=a[i];
 a[i]=a[L1.length+i];
 a[L1.length+i]=temp2;
 }
 
 
 
 //当相等的部分调转完毕之后要对长的顺序表的剩余值采取:将剩余值先用一个temp2保存起来,随后将短的顺序表的值依次向后移动,再将剩余值移动到空出来的位置
 for(int j=0; j<n-m; j++)
 {
 temp2=a[m+n-1];
 for(int i=m+n-1; i>m; i--)
 {
 a[i]=a[i-1];
 
 }
 a[m]=temp2;
 }
 for(int i=0; i<ArraySize; i++)
 {
 printf("%d ",a[i]);
 }
 
 
 }
 //当L1>L2时
 if(m>n)
 {
 int temp3;
 //还是先按照相等的法子来
 for(int i=0; i<n; i++)
 {
 temp3=a[i];
 a[i]=a[L1.length+i];
 a[L1.length+i]=temp3;
 }
 
 //大同小异,简单的来说就是现将a[n]保存到temp3中随后将从n开始后面的数据一次前移最后再将temp3中的值交还给a[m+n-1]
 for(int i=0;i<m-n;i++)//总循环的次数
 {
 temp3=a[n];
 for(int j=n;j<m+n;j++)
 {
 a[j]=a[j+1];
 }
 a[m+n-1]=temp3;
 
 }
 for(int i=0; i<ArraySize; i++)
 {
 printf("%d ",a[i]);
 }
 
 }
 
 
 }
 
 
 //主函数
 int main()
 {
 SqList1 L1;
 SqList2 L2;
 InitList1(L1);
 InitList2(L2);
 printf("请输入L1的值:\n");
 InputList1(L1);
 printf("请输入L2的值:\n");
 InputList2(L2);
 //在主函数中声明一个数组
 InverseArray(L1,L2);
 
 
 
 
 
 
 }
 
 
 | 
 |