查找
一、顺序查找
1.无哨兵
int SequentailSearch(StaticTable* Tbl, ElemenType k) { int i; for (i = Tbl->Length; i > 0 && Element[i] != k; i--);//数组0元素不保存数据 return i;//返回查找元数位置下标 }
2.有哨兵
int SequentailSearch(StaticTable* Tbl, ElemenType k) { int i; Tbl->Element[0] = k;//建立哨兵 for (i = Tbl->Length(); lement[i] != k; i--); return i; }
二、二分查找
#define N 256 typedef struct list* List; typedef int Position, ElementType; //定义类型 struct list{ ElementType Element[N]; //数组0元素不保存数组 Position Length; //Length是最后一个数据的下标 };
注意:必须是数组存储、元素有序
int BinarySearch(List Tbl, ElemType K) {//List 两个分量,一个是数组Element,一个是它的大小Length int left, right, mid, NoFound = -1; left = 1; right = Tbl->Length;//下标0不存数据 while (left <= right) { mid = (left + right) / 2; if (K == Tbl->Element[mid]) return mid; else if (Tbl->Element[mid] > k) { right = mid; } else left = mid; } return NoFound ; }