数据结构-顺序表(数组)循环左移

王道18页,2010年计算机联考真题 n(n>1)个整数放到一维数组R中,将R中保存的顺序序列循环左移p(0<p<n)个位置,
即R中数据由(X0,X1...Xn-1)变换为(Xp,Xp+1...Xn-1,X0,...Xp-1)

思想:动态创建大小为p的辅助数组S,将R中前p个整数一次暂存在S中,同时将R中后n-p个整数左移,然后将S中的p个数,
依次放到R的后续单元中。

CycleLeft(SqList &L,int p) 参数:顺序表(数组)L,左移个数p 功能:循环左移p个位置

时间复杂度:O(n) 空间复杂度:O(p)
注意,本程序的L就相当于R。 L.length就相当于n

手动模拟图:

函数代码:


//循环左移函数
bool CycleLeft(SqList &L,int p)
{
	if(p<0||p>L.length)return false;//p违法
	ElemType* S = new ElemType[p];//动态创建辅助数组S
	for(int i=0;i<p;i++)          //前p个元素保存S中
	{
		S[i]=L.data[i];
	}
	for(int i=p;i<L.length;i++)   //后p个元素依次左移 p个位置
	{
		L.data[i-p]=L.data[i];
	}
	for(int i=0;i<p;i++)        //S中元素放在后面
	{
		L.data[i+L.length-p]=S[i];
	}
	return true;
}


原文:https://blog.csdn.net/lady_killer9/article/details/82755750 
 

猜你喜欢

转载自blog.csdn.net/cillent_boy/article/details/90267307
今日推荐