哈希表
#include "resource.h"
#include "BForm.h"
CBForm form1(ID\\_form1);
CBHashLK mHashTest;
void cmdFind\\_Click()
{
int iKey=form1.Control(ID\\_txtID).TextInt();
if(mHashTest.IsKeyExist(iKey))
{
form1.Control(ID\\_txtResult).TextSet(mHashTest.Item(iKey,false));
form1.Control(ID\\_txtResult2).TextSet(mHashTest.ItemStr(iKey,false));
}
else
{
form1.Control(ID\\_txtResult).TextSet(TEXT("該鍵不存在"));
form1.Control(ID\\_txtResult2).TextSet(TEXT("該鍵不存在"));
}
}
void form1\\_Load()
{
const int cMaxItems=1000000;
mHashTest.AlloMem(cMaxItems\\*2);
//預先分配空間以提高效率,儘管不預先分配後邊也會自動分配空間,但這樣會提高效率(即使預先分配的空間不夠也沒事
for (int i=1;i<=cMaxItems;i++)
{
mHashTest.Add(i\\*10,i,0,0,TEXT("zhr"));
}
mHashTest.Remove(100,false);
mHashTest.Remove(1000,false);
MsgBox(TEXT("哈希表建立完畢!請任意輸入1~1000000之間的鍵,來快速查找其值"));
}
int main()
{
form1.EventAdd(0,eForm\\_Load,form1\\_Load);
form1.EventAdd(ID\\_cmdFind,eCommandButton\\_Click,cmdFind\\_Click);
form1.Show();
}
#include "resource.h"
#include "BForm.h"
#include
CBForm form1(ID\\_form1);
CBArrLink m\\_al;
struct SArrType
{
//定義結構體,僅用於指針法訪問數組鍊表
int Item;
int Item2;
};
void cmdAdd\\_Click()
{
long iClockStart=clock();
int ct=5000000;
for(int i=1;i<=ct;i++){
m\\_al.Add(i,i\\*10);
}
form1.Control(ID\\_lblAdd).TextSet(m\\_al.Count());
form1.Control(ID\\_lblAdd).TextAdd(TEXT("個數據添加完成,"));
form1.Control(ID\\_lblAdd).TextAdd(TEXT("共用時"));
form1.Control(ID\\_lblAdd).TextAdd((double)(clock()-iClockStart));
form1.Control(ID\\_lblAdd).TextAdd(TEXT("毫秒"));
}
void cmdAccess\\_Click()
{
long iClockStart=clock();
int iMethod=form1.Control(ID\\_cboAccessMethod).ListIndex();
int ct=m\\_al.Count();
int i;
if(1==iMethod)
{
for(i=1;i<=ct;i++)
{
if(m\\_al.Item2(i)!=m\\_al.Item(i)\\*10)
{
MsgBox(i,TEXT("發現數據錯誤"));
break;
}
}
}
else
{
//指針效率更高
//獲得m\\_al所有數據的首地址p
struct SArrType \\*p=(struct SArrType\\*)m\\_al.GetItemsArr();
for(i=1;i<=ct;i++)
{
if(p\\[i\\].Item2!=p\\[i\\].Item\\*10)
{
MsgBox(i,TEXT("發現數據錯誤"));
break;
}
}
}
if(i>ct)
{
form1.Control(ID\\_lblAccess).TextSet(TEXT("測試完成"));
form1.Control(ID\\_lblAccess).TextAdd(ct);
form1.Control(ID\\_lblAccess).TextAdd(TEXT("個數據,未發現錯誤。用時:"));
form1.Control(ID\\_lblAccess).TextAdd((double)(clock()-iClockStart));
form1.Control(ID\\_lblAccess).TextAdd(TEXT("毫秒"));
}
}
void cmdDel\\_Click()
{
int index=form1.Control(ID\\_txtDelIndex).TextInt();
m\\_al.Remove(index);
form1.Control(ID\\_lblDel).TextSet(TEXT("刪除後,剩餘數據個數:"));
form1.Control(ID\\_lblDel).TextAdd(m\\_al.Count());
}
int main()
{
form1.EventAdd(ID\\_cmdAdd,eCommandButton\\_Click,cmdAdd\\_Click);
form1.EventAdd(ID\\_cmdAccess,eCommandButton\\_Click,cmdAccess\\_Click);
form1.EventAdd(ID\\_cmdDel,eCommandButton\\_Click,cmdDel\\_Click);
form1.Control(ID\\_cboAccessMethod).AddItem(TEXT("數組法訪問元素"));
form1.Control(ID\\_cboAccessMethod).AddItem(TEXT("指針法訪問元素"));
form1.Control(ID\\_cboAccessMethod).ListIndexSet(1);
form1.Show();
return 0;
}