给定一个数组 nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作示例:输入: nums-[0,1,0,3,12]输出:[13.12.0.0]C语言完整代码
时间: 2024-09-08 22:04:08 浏览: 63
这个问题可以通过两个指针来解决,一个指针用于遍历数组,另一个指针用于放置非零元素。以下是使用C语言实现的代码:
```c
#include <stdio.h>
void moveZeroes(int* nums, int numsSize) {
int k = 0; // k用来记录非零元素的个数
for(int i = 0; i < numsSize; i++) {
if(nums[i] != 0) {
nums[k] = nums[i]; // 将非零元素放到数组前面
k++;
}
}
// 将剩余的零填充到数组后面
for(int i = k; i < numsSize; i++) {
nums[i] = 0;
}
}
int main() {
int nums[] = {0, 1, 0, 3, 12};
int numsSize = sizeof(nums) / sizeof(nums[0]);
moveZeroes(nums, numsSize);
for(int i = 0; i < numsSize; i++) {
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
```
这段代码中,首先定义了一个名为`moveZeroes`的函数,它接受一个整数数组`nums`和一个整数`numsSize`作为参数。函数中定义了一个变量`k`来记录非零元素的个数。通过一个循环来遍历数组,将非零元素移动到数组的前面,并且每移动一个非零元素,`k`就递增。当遍历结束后,再通过一个循环将剩余的位置填充为零。
在`main`函数中,定义了一个数组`nums`和其大小`numsSize`,调用了`moveZeroes`函数进行处理,并打印处理后的数组结果。
阅读全文