王道数据结构课后代码题p18 第10题(c语言代码实现)设将 n(n>1)个整数存放到一维数组 R中。设计一个在时间和空间两方面都尽可能高效的算法。将 R中保存的序列循环左移p(0<p<n)个位置,

  视频讲解在这里:

p18 第10题 c语言实现数据结构代码题_哔哩哔哩_bilibili

这一题与前一题的思路是一样的

先将整个顺序表逆置

然后逆置前n-left个元素

最后逆置后left个元素

本题代码如下

void reverse(int a[], int lef,int  right)
{
	int i = 0;
	int temp = 0;
	for (i = lef; i <=(lef + right)/2; i++)
	{
		temp = a[i];
		a[i] = a[lef + right - i];
		a[lef + right - i] = temp;
	}
}
void change(int a[], int left)
{
	reverse(a, 0, n - 1);
	printf("全部逆置:");
	print(a);
	reverse(a, 0, n - left - 1);
	printf("\n前n-left逆置:");
	print(a);
	reverse(a, n - left, n - 1);
	printf("\n后left逆置:");
	print(a);
}

完整测试代码

#include
int n = 7;
int a[7] = { 1,2,3,4,5,6,7 };
void reverse(int a[], int lef,int  right)
{
	int i = 0;
	int temp = 0;
	for (i = lef; i <=(lef + right)/2; i++)
	{
		temp = a[i];
		a[i] = a[lef + right - i];
		a[lef + right - i] = temp;
	}
}
void print(int a[])
{
	int j = 0;
	for (j = 0; j < n; j++)
		printf("%d ", a[j]);
}
void change(int a[], int left)
{
	reverse(a, 0, n - 1);
	printf("全部逆置:");
	print(a);
	reverse(a, 0, n - left - 1);
	printf("\n前n-left逆置:");
	print(a);
	reverse(a, n - left, n - 1);
	printf("\n后left逆置:");
	print(a);
}
int main()
{
	change(a, 6);
	printf("\n");
	print(a);
	return 0;
}

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