循环轮换数组一次的程序

2025年2月6日 | 阅读3分钟

引言

数组是在计算机编程中用于存储相似数据类型的元素的必要数据结构。数组应该经常被操作,例如,重新排列其组件。数组可以被循环右移一位,例如。在此操作过程中,数组中的每个元素都向右移动一个位置,最后一个元素移到初始位置。本文将探讨 C 语言中循环右移数组的概念,并提供全面的描述和示例。数组的循环右移是一个简单但实用的功能。数组的最后一个元素连接到第一个元素,从而产生圆形结构的外观。当数组从一个位置持续向左旋转时,每个元素都会移动到其前一个元素的位置;最后一个元素回到起始位置。

代码

输出

Program to cyclically rotate an array by one

代码解释

  • 此行通过包含标准输入-输出库,使程序能够使用 printf 等函数。
  • 函数 void cyclically_rotate(int arr[], int n) 接收数组 arr 和其大小 n 作为输入。数组会一直向右旋转一位。
  • int last_elem = arr[n - 1];:数组的最后一个元素存储在 last_elem 变量中。
  • 根据 (int I = n - 1; I > 0; I- - ) 这个循环会从倒数第二个元素遍历到第一个元素。每个元素都会向右移动一位,基本上用前一个元素替换它们。
  • arr[0] = last_elem; 循环结束后,持有原始最后一个元素的 last_elem 的值被赋给数组的第一个元素。由于最后一个元素循环回到了数组的开头,这一步完成了旋转。
  • int main(): 启动程序执行的主函数。
  • 声明并初始化了一个包含元素 1、2、3、4 和 5 的整型数组 int arr[] = {1, 2, 3, 4, 5}。
  • 通过将数组的总大小除以第一个元素的类型大小来计算数组的大小,从而得出数组的总元素个数。
  • 打印原始数组:循环在打印数组时,每个元素之间用空格隔开。
  • cyclically_rotate(arr, n);:通过调用 cyclically_rotate 函数来旋转数组。
  • 打印循环旋转后的数组:此循环以类似于打印原始数组的方式打印旋转后数组的每个元素。
  • return 0 表示程序已成功执行。

时间和空间复杂度

上述代码在连续将数组右移一位方面具有 O(n) 的时间复杂度和 O(1) 的空间复杂度。 O(n) 的时间复杂度是由移位循环引起的,该循环遍历每个元素一次。输入数组的大小会线性影响其复杂度。由于该方法不分配依赖于数组大小的额外内存,因此其 O(1) 的空间复杂度表明它消耗的内存量是恒定的,与输入数组的大小无关。因此,该算法在时间和空间上都是高效的,使其适用于需要最佳内存利用率的情况。

结论

数组的循环右移是一种易于理解但功能强大的数组操作技术。在本文中,我们探讨了循环右移的概念,并详细介绍了 C 语言的实现方法。通过循环右移数组,我们可以有效地重新组织其元素,这在各种编程应用中都很有用。此实现可以作为理解和实现更复杂 C 语言数组操作方法的基础。