王道p18 08.已知在一维数组A[m+n】中依次存放两个线性表编写个函数,将数组中两个顺序表的位置互换

可以使用三次调用:

第一次将整体逆置

第二次将前一个顺序表逆置

第三次将后一个顺序表逆置

可以看我在b站的视频讲解(推的有点慢):p18 第8题 c语言实现王道数据结构课后代码题_哔哩哔哩_bilibili

本题代码如下

void reverse(struct sqlist* L, int left, int right)
{
	int i = 0;
	int temp = 0;
	for (i = left; i <= (right + left) / 2; i++)
	{
		temp = L->a[i];
		L->a[i] = L->a[right + left - i];
		L->a[right + left - i] = temp;
	}
}
void change(struct sqlist* L, int m, int n)
{
	reverse(L, 0, m + n - 1);
	reverse(L, 0, n - 1);
	reverse(L, n, m + n - 1);
}

完整测试代码

#include
#define Max 6
struct sqlist
{
	int a[Max];
	int length;
};
void reverse(struct sqlist* L, int left, int right)
{
	int i = 0;
	int temp = 0;
	for (i = left; i <= (right + left) / 2; i++)
	{
		temp = L->a[i];
		L->a[i] = L->a[right + left - i];
		L->a[right + left - i] = temp;
	}
}
void change(struct sqlist* L, int m, int n)
{
	reverse(L, 0, m + n - 1);
	reverse(L, 0, n - 1);
	reverse(L, n, m + n - 1);
}
int main()
{
	struct sqlist L;
	L.length = 6;
	int j = 0;
	for (j = 0; j < L.length; j++)
		scanf("%d", &L.a[j]);
	printf("原始顺序表为:");
	for (j = 0; j < L.length; j++)
		printf("%d ", L.a[j]);
	change(&L, 3, 3);
	printf("\n修改后的顺序表为:");
	for (j = 0; j < L.length; j++)
		printf("%d ", L.a[j]);
	return 0;
}

你可能感兴趣的:(顺序表,算法,数据结构,c语言)