1.8二分查找
这里就是一个简单二分函数,二分思想就是高中数学学过的二分,可以减少很多查找次数,它每次把区间一分为二,然后到它在的那个区间继续二分,直到找到它为止
Position BinarySearch( List L, ElementType X )
{
int l = 1, r = L->Last;
while(l <= r)
{
int mid = (l + r) / 2;
if(mid > X)
{
r = mid - 1;
mid = (l + r) / 2;
}
else if( mid < X)
{
l = mid + 1;
mid = (l + r) / 2;
}
else
{
return mid
}
}
return NotFound;
}
5.10 线性探测法的查找函数
这是一个开放地址散列表,散列函数的构造在题目中已经给出了,我们要做的只是在散列表里面找出我们要找的元素,要遍历散列表,模板和网课里面的差不多。
Position Find( HashTable H, ElementType Key )
{
Position p = Hash(Key, H->TableSize);
int sum = 1;
while (sum != H->TableSize) {
if (H->Cells[p].Info == Empty || H->Cells[p].Info == Deleted || H->Cells[p].Data == Key) {
return p;
}
p = (p + 1) % H->TableSize;//利用取模来实现回到头部
sum++;
}
return ERROR;
}
6.1 邻接矩阵存储图的深度优先遍历
和一般的DFS没什么区别,就是把迷宫字符串数组改成了图Graph会有点麻烦要用它指来指去的
void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) )
{
Vertex i;
Visited[V] = true;
Visit(V);
for(i = 0;i < Graph->Nv;i++)
{
if(Graph->G[V][i] == 1 && !Visited[i])//邻接矩阵建立时1代表有边,此时如果还没被访问就递归
DFS(Graph,j,Visit);
}
}