c - 在没有 for 的情况下将 C 中的数组向左旋转?
问题描述
我正在编写代码,我需要多次向左旋转数组。问题是我使用了一个for
循环。
当我需要使用带有短数组的函数时,它很快。但是,一旦我使用了一个包含 10.000 个或更多元素的数组,由于for
循环,它真的很长。
所以我想知道是否有另一种方法可以在C中旋转不需要for
or 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;
}
解决方案
有没有办法在没有循环的情况下在 C 中旋转数组?
没有。
数组存储在连续内存中,因此任何移位都意味着线性访问其元素。
至少不是一个明确的。我的意思是有Circular Buffer,它使用固定大小的缓冲区,但它比数组更复杂。例如,当该缓冲区已满时,您需要用新元素覆盖最旧的元素。我想你不想要那个。
我正在编写代码,我需要多次向左旋转数组。
这要求使用简单的链表,而不是数组。
在列表的情况下,您只需将开始处的节点移动到列表的末尾。
如果你在网上搜索“向左旋转一个简单的链表”,你会发现很多例子。
推荐阅读
- kotlin - Kotlin 高阶函数,用于将函数传递给映射
- sql - 创建一个程序来给员工奖金
- ios14 - 关于 PencilKit 的 iOS14
- javascript - 如何使自定义音频播放器播放在线托管的歌曲
- python - TypeError:“函数”对象不可下标。当错误线工作时?
- android-studio - Android Studio以错误的编码显示所有文件的代码
- html - 如何将表单发送到带有 ID 路由的 URL
- python - 将表格转换为 JSON
- rust - 如何确定我是否有一个独特的 Arc 被丢弃?
- c++ - 使用 Poco ProcessHandle 发送命令并获取结果出现异常