顺序表循环左右移动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);
}