C++程序 将所有0移动到数组末尾 – 2(使用单次遍历)
在程序设计过程中,我们常常需要对数组进行操作,例如,将数组中所有的0元素移到数组的末尾。本篇将介绍如何使用C++语言实现这一需求,同时使用单次遍历来解决问题。
问题描述
给定一个数组,设计一个函数,将数组中所有为0的数移到数组的末尾,并保持非零元素的相对位置不变。
例如,假设给定的初始数组为:
int arr[] = {0, 1, 0, 3, 12};
则函数操作后,数组变为:
int arr[] = {1, 3, 12, 0, 0};
解题思路
题目要求将所有为0的数移动到数组的末尾,并且保证非零元素的相对位置不变,其中“保证非零元素的相对位置不变”这一条件是本题的难点。
为了解决这个问题,我们需要对数组进行一次遍历。在遍历数组时,将数组的非零元素依次往数组的左边填充,同时统计数组中0元素的个数。最后,在数组的末尾将0元素填充完毕,即可得到答案。
解题代码
下面是使用C++语言实现的解题代码:
#include <iostream>
using namespace std;
void moveZerosToEnd(int arr[], int n)
{
int count = 0; // 初始化count,记录0元素的个数
// 遍历数组,将非0元素往数组的左边填充
for (int i = 0; i < n; i++) {
if (arr[i] != 0) {
arr[count++] = arr[i];
}
}
// 将0元素填充到数组末尾
while (count < n) {
arr[count++] = 0;
}
}
// 测试代码
int main()
{
int arr[] = {0, 1, 0, 3, 12};
int n = sizeof(arr) / sizeof(arr[0]);
moveZerosToEnd(arr, n);
cout << "移动后的数组为:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
解题说明
在上面的代码中,我们首先定义了一个count变量,用于存储0元素的个数。然后,使用for循环遍历数组,并将非0元素往数组的左边填充。在填充过程中,将count的值加1。最后,使用while循环将0元素填充到数组的末尾,即可得到答案。
结论
本文介绍了如何使用C++语言实现将数组中所有为0的数移到数组的末尾。通过一次遍历的方法,我们让代码更加简洁和高效。同时,我们也通过这道练习题,更好地理解了C++数组的相关操作,为我们日后的程序设计提供了参考。