|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);
}
|
|