题目:设将n(n>1)个整数存放到一维数组R中,设计一个算法,将R中的序列循环左移P(0<P<n)个位置,即将R中的数据由{X0,X1,…,Xn-1}变换为{Xp,Xp+1,…,Xn-1,X0,X1,…,Xp-1}
看完题目最先想到的思路就是逆序算法
算法思想:将n个整数存放到一维数组R中,将R中保存的序列循环左移P个位置,可看成数组中前p个元素和后n-p个元素交换位置,直接有效的算法为逆置算法,先将前p个元素逆置,再将后n-p个元素逆置,最后对整个数组逆置就可以得到题目要求的效果
#include"head.h"
void reverse(int R[],int from, int to) {
int i, temp;
for (i = 0; i < (to-from+1)/2; i++)
{
temp = R[from + i];
R[from + i] = R[to - i];
R[to - i] = temp;
}
}
void converse(int R[], int n, int p) {
reverse(R,0,p-1 );
reverse(R, p, n - 1);
reverse(R, 0, n - 1);
}
int main() {
int R[100], n;
printf("请输入数组长度:");
scanf_s("%d", &n);
printf("请输入数组的内容:\n");
for (int i = 0; i < n; i++)
scanf_s("%d", &R[i]);
printf("原数组内容为:\n");
for (int i = 0; i < n; i++)
printf("%d ", R[i]);
printf("\n");
converse(R, n, 5);
printf("数组循环左移5个元素之后内容为:\n");
for (int i = 0; i < n; i++)
printf("%d ", R[i]);
}
**注意:这个题重在掌握逆序算法,前面“数据结构笔记3”和“数据结构笔记6”**都详细写过逆序算法的一些知识点