C语言上机实践课题目如下:给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序,请给出代码解答
时间: 2024-05-23 21:15:25 浏览: 89
可以用双指针遍历该数组,一个指针记录非零元素的位置,另一个指针遍历整个数组。当遍历到非零元素时,将其放到非零指针的位置上,并将非零指针后移一位。遍历完整个数组后,非零指针的位置即为最后一个非零元素的位置+1,将其后面的元素全部赋值为0即可。
以下是代码实现:
void moveZeroes(int* nums, int numsSize){
int i, j = 0;
for (i = 0; i < numsSize; i++) {
if (nums[i] != 0) {
nums[j] = nums[i];
j++;
}
}
for (i = j; i < numsSize; i++) {
nums[i] = 0;
}
}
当然,实际上还有其他解法,比如可以用一个计数器记录0的个数,再将非零元素往前移动。这里提供的是双指针解法,希望对你有所帮助。
相关问题
用c语言编写程序:给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺 序。
好的,这是一个关于程序设计的问题。可以使用双指针法,一个指针用于遍历数组,另一个指针用于记录非零元素的插入位置。具体实现如下:
```c
void moveZeroes(int* nums, int numsSize){
int i = 0, j = 0;
for(i = 0; i < numsSize; i++){
if(nums[i] != 0){
nums[j] = nums[i];
j++;
}
}
for(i = j; i < numsSize; i++){
nums[i] = 0;
}
}
```
这段程序可以将数组中所有的0移动到数组的末尾,同时保持非零元素的相对顺序不变。
用C++完成:给定一个整数数组 nums,将所有0移动到数组的末尾,同时保持非零元素的相对顺序。
```c
void moveZeroes(int* nums, int numsSize){
int i,j=0;
for(i=0;i<numsSize;i++){
if(nums[i]!=0){
nums[j++]=nums[i];
}
}
while(j<numsSize){
nums[j++]=0;
}
}
```
思路:定义一个指针j指向非零元素的下标,遍历数组,当遇到非零元素时,将其赋值给nums[j],同时j指针后移;最后将nums[j]~nums[numsSize-1]的元素赋值为0。这样就能够实现把0移动到数组末尾,同时保持非零元素的相对顺序。
阅读全文