C语言 数组循环左移问题

如有元素个数为n的序列: abcdefgh 要求循环左移 p位(如设置p=3),则要求操作后的序列从 abcdefgh 变为: defghabc

把 abc 设为序列A,defgh设为序列B

先将 A 逆置得到  cba

再将 B 逆置得到 hgfed

得到 cbahgfed

再整个序列逆置一次即得到 defghabc 即BA

这是有公式的:

C语言 数组循环左移问题_第1张图片


逆置代码:

void Reverse(ElemType A[],int left,int right)
{
	int i =0;
	for(i; i<(right - left + 1)/2 ; i++)
	{
		//交换
		ElemType temp;
		temp = A[left+i];
		A[left+i] = A[right-i];
		A[right-i] = A[left+i];
	}
}

要实现左移,如上图分三步走,实现三次逆置即可

实现代码:

void Reverse(ElemType A[],int left,int right)
{
	int i =0;
	for(i; i<(right - left + 1)/2 ; i++)
	{
		//交换
		ElemType temp;
		temp = A[left+i];
		A[left+i] = A[right-i];
		A[right-i] = A[left+i];
	}
}

void func(ElemType A[])
{
	Reverse(A[],0,p-1);//前部分序列逆置
	Reverse(A[],p,n-1);//后部分序列逆置
	Reverse(A[],0,n-1);//整个序列逆置
}


你可能感兴趣的:(#,数据结构)