/*已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3,...,am)和(b1,b2,b3,...,bn)。试
编写一个函数,将数组中两个顺序表的位置互换,既将(b1,b2,b3,...,bn)放在(a1,a2,a3,...,am)的前面*/
#include<stdio.h>
#include<stdlib.h>
#define InitSize 50
typedef int ElemType;
typedef struct{
ElemType *data;
int length;
int maxSize;
}SqList;
bool InitList(SqList &L)
{
L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
L.length = 0;
return true;
}
bool concatList(SqList &C,SqList A,SqList B) //合并
{
int i,j;
for(i=0;i<A.length;++i)
{
C.data[i] = A.data[i];
++C.length;
}
for(j=0;j<B.length;++j)
{
C.data[i+j] = B.data[j];
++C.length;
}
return true;
}
bool ReverseList(SqList &L,int left,int right)
{
if(left>=right || right>=L.length) return false;
int mid = (right+left)/2;
for(int i=0;i<=mid-left;++i)
{
ElemType temp = L.data[left+i];
L.data[left+i] = L.data[right-i];
L.data[right-i]=temp;
}
return true;
}
bool printList(SqList L)
{
for(int i=0;i<L.length;++i)
printf("%d ",L.data[i]);
printf("\n");
return true;
}
void main()
{
int i,j;
SqList A,B,C;
InitList(A);
InitList(B);
InitList(C);
int a[3] = {1,2,3};
int b[5] = {4,5,6,7,8};
for(i=0;i<3;++i)
{
A.data[i] = a[i];
++A.length;
}
for(j=0;j<5;++j)
{
B.data[j] = b[j];
++B.length;
}
concatList(C,A,B);
printList(C);
ReverseList(C,0,C.length-1);
ReverseList(C,0,B.length-1);
ReverseList(C,B.length,C.length-1);
printList(C);
}
两个线性表整体位置互换
最新推荐文章于 2022-04-26 21:26:33 发布