/*已知在一维数组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-02 16:25:59 发布
该篇博客介绍了一个C语言实现的函数,用于在一维数组中将两个顺序存储的线性表(a1,a2,...,am)和(b1,b2,...,bn)的位置互换。首先通过concatList函数合并两个线性表,然后使用ReverseList函数进行三次反转操作,最终达到互换位置的目的。示例代码展示了如何初始化线性表、合并、反转和打印线性表的操作。
2124

被折叠的 条评论
为什么被折叠?



