C++程序 将所有0移动到数组末尾 – 2(使用单次遍历)

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++数组的相关操作,为我们日后的程序设计提供了参考。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例