Bảng băm là một cấu trúc dữ liệu được sử dụng để lưu trữ các cặp khóa-giá trị. Hàm băm được sử dụng bởi bảng băm để tính toán một chỉ mục vào một mảng trong đó một phần tử sẽ được chèn hoặc tìm kiếm.
Đây là một chương trình C ++ để triển khai chuỗi Hash Tables với danh sách được liên kết kép.
Thuật toán
Để chèn:
Begin Khai báo Hàm insert (int k, int v) int hash_v =HashFunc (k) HashTableEntry * en =ht [hash_v] if (en ==NULL) en =new HashTableEntry en-> d =v en-> k =k en-> n =NULL en-> p =NULL ht [hash_v] =en top [hash_v] =en else while (en! =NULL) en =en-> n en =new HashTableEntry en-> d =v vi-> k =k vi-> n =NULL vi-> p =top [hash_v] top [hash_v] -> n =en top [hash_v] =enEnd
Để xóa:
Begin Khai báo hàm remove (int k) int hash_v =HashFunc (k) HashTableEntry * en =ht [hash_v] if (en-> k! =k || en ==NULL) In Không tìm thấy phần tử nào tại khóa trả về while (vi! =NULL) if (en-> n ==NULL) if (en-> p ==NULL) ht [hash_v] =NULL top [hash_v] =NULL xóa vi break else top [hash_v] =en-> p top [hash_v] -> n =NULL xóa en en =top [hash_v] en =en-> nEnd
Đối với tìm kiếm, một giá trị chính:
Begin Khai báo hàm SearchKey (int k) int hash_v =HashFunc (k) bool flag =false HashTableEntry * en =ht [hash_v] if (en! =NULL) while (en! =NULL) if (en-> k ==k) flag =true if (flag) In Phần tử được tìm thấy tại key print en-> d en =en-> n if (! flag) In “Không tìm thấy Phần tử nào trong key.” Kết thúc.
Mã mẫu
#includeconst int T_S =200; using namespace std; struct HashTableEntry {int d, k; HashTableEntry * n; HashTableEntry * p;}; class HashMapTable {public:HashTableEntry ** ht, ** top; HashMapTable () {ht =new HashTableEntry * [T_S]; top =new HashTableEntry * [T_S]; for (int i =0; i d =v; vi-> k =k; vi-> n =NULL; vi-> p =NULL; ht [hash_v] =vi; top [hash_v] =vi; } else {while (en! =NULL) en =en-> n; vi =new HashTableEntry; vi-> d =v; vi-> k =k; vi-> n =NULL; vi-> p =top [hash_v]; top [hash_v] -> n =vi; top [hash_v] =vi; }} void remove (int k) {int hash_v =HashFunc (k); HashTableEntry * en =ht [hash_v]; if (en-> k! =k || en ==NULL) {cout <<"Không tìm thấy phần tử nào tại khóa:" < n ==NULL) {if (en-> p ==NULL) {ht [hash_v] =NULL; top [hash_v] =NULL; xóa vi; phá vỡ; } else {top [hash_v] =vi-> p; top [hash_v] -> n =NULL; xóa vi; vi =top [hash_v]; }} en =en-> n; }} void SearchKey (int k) {int hash_v =HashFunc (k); cờ bool =false; HashTableEntry * en =ht [hash_v]; if (en! =NULL) {while (en! =NULL) {if (en-> k ==k) {flag =true; } if (flag) {cout <<"Phần tử tìm thấy tại khóa" < d < n; }} if (! flag) cout <<"Không tìm thấy phần tử nào tại khóa" < > c; switch (c) {case 1:cout <<"Nhập phần tử cần chèn:"; cin>> v; cout <<"Nhập khóa tại đó phần tử sẽ được chèn:"; cin>> k; hash.insert (k, v); phá vỡ; case 2:cout <<"Nhập khóa của phần tử cần tìm:"; cin>> k; hash.SearchKey (k); phá vỡ; case 3:cout <<"Nhập khóa của phần tử cần xóa:"; cin>> k; hash.remove (k); phá vỡ; case 4:exit (1); default:cout <<"\ nNhập đúng tùy chọn \ n"; }} trả về 0;}
Đầu ra
1.Chèn phần tử vào bảng2. Tìm kiếm phần tử từ key3. Xóa phần tử tại một khóa4. Tìm kiếm phần tử từ key3. Xóa phần tử tại một key4 .ExitEnter sự lựa chọn của bạn:1Nhập phần tử sẽ được chèn:2Nhập khóa tại đó phần tử sẽ được chèn:31.Chèn phần tử vào bảng2. Tìm kiếm phần tử từ key3 .Xóa phần tử tại một key4 Nhập phần tử. 4 Nhập khóa tại đó phần tử sẽ được chèn:51 Chèn phần tử vào bảng2. Tìm kiếm phần tử từ khóa3. Xóa phần tử tại một khóa4.ExitNhập khóa của phần tử cần tìm:6Phải tìm thấy phần tử tại khóa 6:71. Chèn phần tử vào bảng2. Tìm kiếm phần tử từ khóa3. Xóa elem ent at a key4.ExitEnter your choice:3 Nhập key của phần tử cần xóa:11.Chèn phần tử vào bảng.