标签:size 存储 复杂 seq color 算法设计 blog 移动 ++
1 #include <stdio.h>
2
3 // 线性表
4 typedef struct {
5 int arr[10];
6 int length;
7 } seq_list;
8
9 void delnodel(seq_list* list, int x)
10 {
11 int k = 0;
12 int i;
13 for (i=0; i<list->length; i++){
14 if (list->arr[i] != x){
15 list->arr[k] = list->arr[i];
16 k++;
17 }
18 }
19 }
1 #include <stdio.h>
2
3 // 线性表
4 typedef struct {
5 int arr[10];
6 int length;
7 } seq_list;
8
9 void delnode2(seq_list* list, int x)
10 {
11 // 记录以遍历的 x 的个数
12 int k = 0;
13 int i = 0;
14 while (i < list->length){
15 if (list->arr[i] == x){
16 k++;
17 } else {
18 list->arr[i-k] = list->arr[i]; // 移动 k 个位置
19 }
20 i++;
21 }
22 list->length -= k; // 更新长度
23 }
上面的两个解法本质上是干的事情是一样的, 将元素移动 n 个位置覆盖掉不等于x的元素,两个算法中 n 是相等的,一个通过记录不等于x的元素个数知道n;一个通过记录等于x的元素个数知道n;等于x的 + 不等于x的 = 长度;
标签:size 存储 复杂 seq color 算法设计 blog 移动 ++
原文地址:http://www.cnblogs.com/tingshuo123/p/7074767.html