首页 > 解决方案 > 在没有 for 的情况下将 C 中的数组向左旋转?

问题描述

我正在编写代码,我需要多次向左旋转数组。问题是我使用了一个for循环。

当我需要使用带有短数组的函数时,它很快。但是,一旦我使用了一个包含 10.000 个或更多元素的数组,由于for循环,它真的很长。

所以我想知道是否有另一种方法可以在C中旋转不需要foror while(或任何其他循环)的数组?

void rotate_left(int *array, int size)
{
    int nb = array[0];

    for (int i = 0; i < size; i++) {
        array[i] = array[i + 1];
    }
    array[size - 1] = nb;
}

标签: cfor-looptimerotation

解决方案


有没有办法在没有循环的情况下在 C 中旋转数组?

没有

数组存储在连续内存中,因此任何移位都意味着线性访问其元素。

至少不是一个明确的。我的意思是有Circular Buffer,它使用固定大小的缓冲区,但它比数组更复杂。例如,当该缓冲区已满时,您需要用新元素覆盖最旧的元素。我想你不想要那个。


我正在编写代码,我需要多次向左旋转数组。

这要求使用简单的链表,而不是数组。

在列表的情况下,您只需将开始处的节点移动到列表的末尾。

如果你在网上搜索“向左旋转一个简单的链表”,你会发现很多例子。


推荐阅读