顺序表循环左右移动n个单位

顺序表循环左右移动n个单位

思想:如下图,比如需要循环右移两个单位,先整体倒置,再局部倒置即可。

思想

void Reverse(SqList &L,int low,int high)  //倒置函数 整个表倒置low = 1 high = L.length
{
	while (low <= high)
	{
		L.r[0] = L.r[low];
		L.r[low] = L.r[high];
		L.r[high] = L.r[0];    //交换元素,带哨兵
		low++;high--;
	}
}

void MoveRight(SqList &L,int n) //循环右移
{
	Reverse(L,1,L.lenth);  //整个表倒置
	Reverse(L,1,n);	 //局部倒置
	Reverse(L,n+1,L.lenth);

}

void MoveLeft(SqList &L,int n)  //循环左移 相当于右移length - n个单位
{
	Reverse(L,1,L.lenth);
	Reverse(L,1,L.lenth - n);
	Reverse(L,L.lenth - n + 1,L.lenth);
}

运行结果:

在这里插入图片描述

发布了11 篇原创文章 · 获赞 18 · 访问量 969

猜你喜欢

转载自blog.csdn.net/weixin_41546300/article/details/104648937
今日推荐