编写c程序,实现移动零,即使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。 右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。
时间: 2024-08-12 09:07:35 浏览: 52
当A链表空时新链表尾部接上B链表-C语言__指针数组与指针的指针
在C程序中实现移动零的操作,通常可以通过双指针技术来完成。这里是一个简单的示例,假设我们有一个整数数组,需要将所有非零元素移动到数组的前半部分,而将所有零元素移动到后半部分。以下是使用C语言编写的代码:
```c
#include <stdio.h>
void move_zeros(int* arr, int size) {
int left = 0; // 左指针
for (int right = 0; right < size; right++) { // 右指针
if (arr[right] != 0) { // 如果遇到非零元素
// 交换左右指针指向的元素
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
// 左指针右移
left++;
}
}
}
int main() {
int arr[] = {0, 1, 0, 3, 12, 0, 5, 0};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
move_zeros(arr, size);
printf("\nArray with zeros moved to end: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在这个例子中,`move_zeros` 函数接受一个整数数组和它的大小作为参数,通过循环遍历数组,当遇到非零元素时,将其与左指针位置的元素交换,然后左指针向右移动。运行 `main` 函数后,可以看到数组的非零元素被移到了前面,零元素被移到了后面。
阅读全文