两个线性表整体位置互换

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*已知在一维数组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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值