C代码算法

数组压缩
让数组从{0,1,2,0,3,4}变成{1,2,3,4,0,0}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>

void compressArray(int arr[], int size) {
int writeIndex = 0;

for (int i = 0; i < size; i++) {
if (arr[i] != 0) {
arr[writeIndex] = arr[i];
writeIndex++;
}
}

for (; writeIndex < size; writeIndex++) {
arr[writeIndex] = 0;
}
}

int main() {
int array[] = {0, 1, 2, 0, 3, 4};
int size = sizeof(array) / sizeof(array[0]);

printf("Original array: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}

compressArray(array, size);

printf("\nCompressed array: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}

printf("\n");

return 0;
}

让数组从{0,1,2,0,3,4}变成{1,2,3,4,0,0}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>

void reverseArray(int arr[], int size) {
int temp[size];
int j = 0;

for (int i = size - 1; i >= 0; i--) {
if (arr[i] != 0) {
temp[j] = arr[i];
j++;
}
}

for (; j < size; j++) {
temp[j] = 0;
}

for (int i = 0; i < size; i++) {
arr[i] = temp[i];
}
}

int main() {
int array[] = {1, 2, 3, 4, 0, 0};
int size = sizeof(array) / sizeof(array[0]);

printf("Original array: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}

reverseArray(array, size);

printf("\nReversed array: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}

printf("\n");

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
* @brief 向滑动窗口的头部或尾部插入数据。
* @param arr 滑动窗口数据。
* @param size 滑动窗口大小。
* @param newElement 新增元素。
* @param is_insert_end 是否插入到末尾。
*/
static void shiftArray(t_app_sms_info arr[], uint32_t size, t_app_sms_info newElement, bool is_insert_end)
{
jx_log("is_insert_end:%d.", is_insert_end);
jx_log("Original array:");
for (uint32_t i = 0; i < size; i++)
{
jx_log("index:%d, number:%s, time:%s.", i, arr[i].number, arr[i].time);
jx_log("offset_index:%d, state:%d.", arr[i].offset_index, arr[i].state);
jx_log("data:%s.", arr[i].data);
}

if (is_insert_end)
{
// 向后移动数组中的结构体元素
for (uint32_t i = 0; i < size - 1; i++)
{
arr[i] = arr[i + 1]; // 浅复制。
}
// 在数组的最后一个位置上插入新结构体元素
arr[size - 1] = newElement;
}
else
{
// 向前移动数组中的结构体元素
for (uint32_t i = size - 1; i > 0; i--)
{
arr[i] = arr[i - 1];
}
// 在数组的最后一个位置上插入新结构体元素
arr[0] = newElement;
}

jx_log("Moved array:");
for (uint32_t i = 0; i < size; i++)
{
jx_log("index:%d, number:%s, time:%s.", i, arr[i].number, arr[i].time);
jx_log("offset_index:%d, state:%d.", arr[i].offset_index, arr[i].state);
jx_log("data:%s.", arr[i].data);
}
}