移动圆形阵列

use*_*120 1 c++

我有一个家庭作业,要求必须在内存中移动一个圆形阵列-n个位置.

我已使用以下C++语法完成了该任务:

while ( r < 0 )  // rotate negatively.
{
    if ( i == top+1 )
    {
        current->n = items[top+1].n;  
        items[top+1].n = items[back-1].n;
    }
    midPtr->n  = items[++i].n;
    items[i].n = current->n;

    if ( i == back-1 )
    {
            items[back-1].n = current->n;
            i = 0;
            r++; continue;
    }
    else
    {
            current->n = items[++i].n;
            items[i].n = midPtr->n;
            if ( i == back-1 )
            {
                    i = 0;
                    r++; continue;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人有更好,更有效的方法将圆形阵列移动-n单位.

因为我似乎在ptr变量之间执行不必要的转移.

Jam*_*aro 10

没有给你代码(这毕竟是一个家庭作业)考虑这个...循环数组只是内存中n个单位的分配和指向数组"开始"的指针.数组中的第一项不必是分配的内存中的最低地址,而只是数组中表示逻辑第一个元素的项的指针/索引.移动数组只是移动第一个元素的索引.它可以在没有循环的情况下完成,只需计算索引需要移动的距离 - 考虑数据结构的循环性质.