源代码地址:
http://download.csdn.net/detail/witch_soya/4881954
自己写了一个测试用例。dll效果如下:
其中使用半跳检索法查询的代码如下。
//半跳检索法查询
int CReadQQWryDat::QueryIndex(CString strIP)
{
int index = -1;
DWORD dwInputIP;
DWORD dwStartIP;
dwInputIP = IP2DWORD(strIP);
//顺序查找
/*
if (dwInputIP<=0x7FFFFFFF)
for (int i=0;i<QueryRecordCount();i++)
{
dwStartIP = QuerySIP(i);
if (dwStartIP<=dwInputIP && dwInputIP<=m_dwLastIP)
{
index = i;
break;
}
}
else
for(int i=QueryRecordCount()-1;i>=0;i--)
{
dwStartIP = QuerySIP(i);
if (dwStartIP <=dwInputIP && dwInputIP <= m_dwLastIP)
{
index = i;
break;
}
}
*/
//半跳法
int iT;
int iB,iE;
iB = 0;
iE = QueryRecordCount()-1;
iT = iE/2;
while(iB<iE)
{
dwStartIP = QuerySIP(iT);
if (dwInputIP == dwStartIP)
{
index = iT;
break;
}
if ((iE-iB) <= 1)
{
for (int i=iB;i<=iE;i++)
{
dwStartIP = QuerySIP(i);
if (dwStartIP <= dwInputIP && dwInputIP <= m_dwLastIP )
{
index = i;
break;
}
}
break;
}
if (dwInputIP > dwStartIP)
{
iB = iT;
}
else
{
iE = iT;
}
iT = iB + (iE-iB)/2;
}
return index;
}