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 ++ để thực hiện chuỗi băm bảng với đầu danh sách.
Thuật toán
Để chèn:
Begin Khai báo hàm Insert (int k, int v) int hash_v =HashFunc (k) if (ht [hash_v] ==NULL) ht [hash_v] =new ListHead (k, v) else ListHead * en =ht [ hash_v] while (en-> n! =NULL) en =en-> n if (en-> k ==k) en-> v =v else en-> n =new ListHead (k, v) End.
Đối với Tìm kiếm một giá trị khóa:
Begin Decla Hàm SearchKey (int k) int hash_v =HashFunc (k) if (ht [hash_v] ==NULL) return -1 else ListHead * en =ht [hash_v] while (en! =NULL và en-> k! =k) en =en-> n if (en ==NULL) return -1 else return en-> vEnd
Để xóa:
Begin Khai báo Hàm Remove (int k) int hash_v =HashFunc (k) if (ht [hash_v]! =NULL) ListHead * en =ht [hash_v]; ListHead * p =NULL; while (en-> n! =NULL và en-> k! =k) p =en en =en-> n if (en-> k ==k) if (p ==NULL) ListHead * n =en-> n xóa vi; ht [hash_v] =n else ListHead * n =en-> n delete en p-> n =nEnd.
Mã mẫu
#includeusing namespace std; const int T_S =20; class ListHead {public:int k, v; ListHead * n; ListHead (int k, int v) {this-> k =k; this-> v =v; this-> n =NULL; }}; class HashMapTable {private:ListHead ** ht; public:HashMapTable () {ht =new ListHead * [T_S]; for (int i =0; i n! =NULL) en =en-> n; if (en-> k ==k) en-> v =v; else en-> n =new ListHead (k, v); }} int SearchKey (int k) {int hash_v =HashFunc (k); if (ht [hash_v] ==NULL) return -1; else {ListHead * en =ht [hash_v]; while (en! =NULL &&en-> k! =k) en =en-> n; if (en ==NULL) return -1; else return en-> v; }} void Remove (int k) {int hash_v =HashFunc (k); if (ht [hash_v]! =NULL) {ListHead * en =ht [hash_v]; ListHead * p =NULL; while (en-> n! =NULL &&en-> k! =k) {p =en; en =en-> n; } if (en-> k ==k) {if (p ==NULL) {ListHead * n =en-> n; xóa vi; ht [hash_v] =n; } else {ListHead * n =en-> n; xóa vi; p-> n =n; }}}} ~ HashMapTable () {xóa [] ht; }}}; int main () {Hàm băm HashMapTable; int k, v; int c; while (1) {cout <<"1.Chèn phần tử vào bảng" < > 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; if (hash.SearchKey (k) ==-1) cout <<"Không tìm thấy phần tử nào trong khoá" < > k; if (hash.SearchKey (k) ==-1) cout <<"Key" <
Đầu ra
1.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. 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:10 Nhập khóa tại đó phần tử sẽ được chèn:11Chè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ử. 12Nhập khóa tại đó phần tử sẽ được chèn:41 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. tại một key4 .ExitEnter sự lựa chọn của bạn:1Enter phần tử sẽ được chèn:30 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 .Exit 6:71.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 .ExitEnter your choice:3Nhập khóa của phần tử cần xóa:1Entry Remished1.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óa. / pre>