用c 建立乙個最簡單的雜湊表(拉鍊法)

2021-09-05 11:15:24 字數 2229 閱讀 5700

我們都知道,當我們要在乙個集合中查詢資料時,如果這個集合是順序表且我們能確定要找的資料在順序表中的位置的話,我們就能通過下標直接找到元素,這無非是我們要追求的最高效的查詢策略!但是現實總是那麼骨感,在大多數情況下,要在茫茫資料海洋中找某些關鍵資訊,是不可能直接找到的。因為我們並不知道我們要找的資料與其所在位置之間是否存在某種關聯。

所以我們在儲存資料時,建立如同順序表形式的可以按照下標進行查詢的儲存集合,然後我們可以認為建立要存的關鍵資訊和其在集合中的下標之間的關係,這樣我們在找想找的資訊時,就可以確定資訊在集合中的下標了,這樣就可實現較為高效的查詢了。而我們所說的這個集合就稱為雜湊表,建立的下標與資訊的關係可以通過雜湊函式(自定義合理的函式)來實現。

雜湊表在查詢,加密等很多方面都有廣泛用途。

今天我用拉鍊法建立了簡單的雜湊表其結構如圖所示:

原始碼

#include

#include

#include

#include

#include

using namespace std;

class data

~data()

};class info:public data

~info()

static

void

init

(array,27

>

&ss)

;static

void

input

(array,27

>

&ss)

;static

intgetloc

(char a);;

static

void

search

(array,27

>

&ss);}

;void info:

:search

(array,27

>

&ss)

int i =0;

int flag =1;

for(i=

0;i<

(int

)ss[index]

->ls.

size()

;i++)}

if(flag ==1)

}int info:

:getloc

(char a)

else

if(a>=

'a'&&a<=

'z')

else

}void info:

:input

(array,27

>

&ss)

cin>>dd.age;

//差試用一下lamda表示式

auto key=

[dd]()

else

if(dd.name[0]

>=

'a'&&dd.name[0]

<=

'z')

else

if(dd.name[0]

==' '

)else};

int index=

key();

if(index==-1

) ss[index]

->ls.

push_back

(dd);}

}void info:

:init

(array,27

>

&ss)

}int

main()

這個程式剛開始建立了info類的指標陣列,info類繼承了data類,info類裡面有個vector容器主要存data類資料資訊的。舉個例子吧,要是name首字母是a,根據key = (大寫字母-65),則該data類所有資訊就存在以下標為key的陣列中的vector容器中,即ss[key].ls.push_back(含相應name關鍵字的物件),後面同樣的實現方法。在找時只需根據name首字母將要搜尋的範圍縮小,然後只能乙個個遍歷vector容器了。程式總的邏輯

很簡單,使用拉鍊法,雜湊衝突也比較容易解決。

用C 製作乙個最簡單的Web Service

下面,我們看看如何建立和部署乙個最簡單的web服務 建立web服務 1.在root目錄下建立乙個叫做webservice的目錄。2.建立下面這樣乙個檔案 webservice language c class addnumbers using system using system.web.serv...

用C 製作乙個最簡單的Web Service

下面,我們看看如何建立和部署乙個最簡單的web服務 建立web服務 1.在wwwroot目錄下建立乙個叫做webservice的目錄。2.建立下面這樣乙個檔案 webservice language c class addnumbers using system using system.web.s...

建立乙個最簡單的VST

vst外掛程式在國內 人中還是被廣泛使用的,從0開始開發vst外掛程式,我個人想著還是從vst開始比較好。因為win32的基礎不是很好,動態鏈結庫的程式設計也不清楚,所以吃了很多苦頭。廢話戛然而止。第一步使用vs2013 新建工程,win32工程,dll,空專案,匯出符號。這裡我一開始新建的是mfc...