按位查找:
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #define InitSize 10 #include<stdio.h> #include<stdlib.h> typedef struct { int *data; int MaxSize; int length; }SqList;
void InitList(SqList &L);
int GetElem(SqList L, int i);
bool IsFull(SqList &L);
bool ListAppend(SqList &L,int e); int main(void) { SqList L; InitList(L);
ListAppend(L, 11); ListAppend(L, 22); ListAppend(L, 33); ListAppend(L, 44); ListAppend(L, 55); ListAppend(L, 66); ListAppend(L, 77);
int num = GetElem(L, 3); printf("获取到%d", num); return 0; }
void InitList(SqList &L) { L.data = (int *)malloc(InitSize*sizeof(int)); L.length = 0; L.MaxSize = InitSize; }
int GetElem(SqList L, int i) { return L.data[i-1]; }
bool IsFull(SqList &L) { if (L.length == L.MaxSize) { return true; } else { return false; } }
bool ListAppend(SqList &L,int e) { if (IsFull(L)) { printf("数组满了!\n"); return false; } else { L.data[L.length] = e; L.length++; return true; } }
|
时间复杂度
时间复杂度: O(1), 因为在内存中是连续存放的,可以根据起始地址和数据元素大小立即找到第i个元素
按值查找:
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #define InitSize 10 #include<stdio.h> #include<stdlib.h> typedef struct { int *data; int MaxSize; int length; }SqList;
void InitList(SqList &L);
int LocateElem(SqList L, int e);
bool IsFull(SqList &L);
bool ListAppend(SqList &L,int e); int main(void) { SqList L; InitList(L);
ListAppend(L, 11); ListAppend(L, 22); ListAppend(L, 33); ListAppend(L, 44); ListAppend(L, 55); ListAppend(L, 66); ListAppend(L, 77);
int local = LocateElem(L, 33); printf("获取到%d", local); return 0; }
void InitList(SqList &L) { L.data = (int *)malloc(InitSize*sizeof(int)); L.length = 0; L.MaxSize = InitSize; }
int LocateElem(SqList L, int e) { for (int i = 0; i < L.length; i++) { if (L.data[i] == e) { return i+1; } } return 0; }
bool IsFull(SqList &L) { if (L.length == L.MaxSize) { return true; } else { return false; } }
bool ListAppend(SqList &L,int e) { if (IsFull(L)) { printf("数组满了!\n"); return false; } else { L.data[L.length] = e; L.length++; return true; } }
|
时间复杂度
最好情况:目标元素在表头,循环1次,最好时间复杂度=O(1) 最坏情况:目标元素在表尾,循环n次,最坏时间复杂度=O(n) 平均情况:假设目标元素出现在任何一个位置的概率相同,都是 $$ \frac{1}{n} $$ 目标元素在第1位,循环1次;在第2位,循环2次;在第n位,循环n次 平均循环次数= $$ 1·\frac{1}{n} + 2·\frac{1}{n} + 3·\frac{1}{n} + … + n·\frac{1}{n} = \frac{n(n+1)}{2}·\frac{1}{n}=\frac{n+1}{2} $$