写一个有效率的算法,删除数组中所有空元素
时间: 2023-05-21 10:04:36 浏览: 49
可以使用双指针法,一个指针遍历整个数组,另一个指针指向新数组中的下一个位置。如果当前元素不为空,将其添加到新数组中,同时将新数组指针向后移动一位。最后返回新数组即可。
以下是示例代码:
void removeEmptyElements(int* arr, int length) {
int* newArr = new int[length];
int newIndex = 0;
for (int i = 0; i < length; i++) {
if (arr[i] != NULL) {
newArr[newIndex] = arr[i];
newIndex++;
}
}
for (int i = 0; i < newIndex; i++) {
arr[i] = newArr[i];
}
delete[] newArr;
}
相关问题
用C语言写一个算法用于统计一个数组中各元素的出现次数
以下是用C语言写的一个算法用于统计一个数组中各元素的出现次数:
```c
#include <stdio.h>
void count(int arr[], int size) {
int i, j, unique[size], freq[size], count = 0;
// Loop through the array and find unique elements
for (i = 0; i < size; i++) {
int isUnique = 1;
for (j = 0; j < count; j++) {
if (arr[i] == unique[j]) {
isUnique = 0;
freq[j]++;
break;
}
}
if (isUnique) {
unique[count] = arr[i];
freq[count] = 1;
count++;
}
}
// Print the frequency of each element
for (i = 0; i < count; i++) {
printf("%d occurs %d times\n", unique[i], freq[i]);
}
}
int main() {
int arr[] = {1, 2, 3, 4, 3, 2, 1, 1, 5};
int size = sizeof(arr) / sizeof(arr[0]);
count(arr, size);
return 0;
}
```
该算法首先创建两个数组:一个用于存储唯一的元素,另一个用于存储每个元素的出现次数。然后,它循环遍历数组,找到唯一的元素并将其存储在unique数组中。如果元素已经存在于unique数组中,则增加对应的频率。最后,算法循环遍历unique数组并打印每个元素的频率。在主函数中,我们传递一个整数数组和数组的大小给count函数来运行该算法。
c语言 删除数组中的重复元素保留一个
要删除数组中的重复元素,可以使用C语言编写一个算法来实现。具体的步骤如下:
1. 定义一个函数,接收一个整型数组和数组的大小作为参数。
2. 在函数内部,创建一个新的数组,并将原数组的第一个元素存入新数组中。
3. 使用两个嵌套的for循环来遍历原数组。外层循环用于迭代原数组的每个元素,内层循环用于比较当前元素与新数组中的元素是否相同。如果相同,则跳过此元素;否则,将该元素添加到新数组。
4. 返回新数组。
下面是一个示例代码实现:
```c
#include <stdio.h>
int* removeDuplicates(int arr[], int size) {
int* newArr = (int*)malloc(size * sizeof(int));
int newSize = 1; // 新数组的大小,默认为1,即保留原数组的第一个元素
newArr[0] = arr[0]; // 将原数组的第一个元素存入新数组
for (int i = 1; i < size; i++) {
int isDuplicate = 0;
for (int j = 0; j < newSize; j++) {
if (arr[i] == newArr[j]) {
isDuplicate = 1;
break;
}
}
if (isDuplicate == 0) {
newArr[newSize] = arr[i];
newSize++;
}
}
return newArr;
}
int main() {
int arr[] = {1, 2, 3, 4, 2, 3, 5, 6, 1};
int size = sizeof(arr) / sizeof(arr[0]);
int* newArr = removeDuplicates(arr, size);
printf("原数组:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n删除重复元素后的数组:");
for (int i = 0; i < newSize; i++) {
printf("%d ", newArr[i]);
}
free(newArr); // 释放内存
return 0;
}
```
这段代码将会输出:
```
原数组:1 2 3 4 2 3 5 6 1
删除重复元素后的数组:1 2 3 4 5 6
```
通过该算法,我们可以删除数组中的重复元素,并保留一个。