线性表中的元素循环位移问题
算法设计思想
循环位移问题中,会将左移过程中越界的部分置于原线性表的尾部。同理,右移过程中则会将越界部分置于原线性表的首部。以左移为例做下列分析:
1、线性表的元素循环左移,越界部分为A,为越界部分为B。原序列即为AB。
2、这样循环左移就可以视为是将原序列(AB)转换成序列(BA)
3、先将A序列置为逆序,即(-A)
4、再将B序列置为逆序,即(-B)
5、此时原序列转化为了((-A)(-B))
6、最后将整个序列在置为逆序,最终得到(BA)
问题概述
设将n(n>1)个整数存放到一维数组R中,设计一个算法,将R中的序列循环左移P(0<P<n)个位置,即将R中的数据由{X0,X1,...,Xn-1}变换为{Xp,Xp+1,X,...,Xn-1,X0,X1,...,Xp-1}。
算法实现
#include<bits/stdc++.h>
#define N 50
using namespace std;
void Reverse(int R[],int l,int r){//将A和B部分内的元素置为逆序
int i,j;
int temp;
for(i=l,j=r;i<j;++i,--j){
temp=R[i];
R[i]=R[j];
R[j]=temp;
}
}
void RCR(int R[],