哈希表是一种数据结构,用于存储键值对。哈希表使用哈希函数来计算要插入或搜索元素的数组的索引。
这是一个C ++程序,用于实现带有列表头的哈希表链接。
对于插入:
Begin Declare function 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.
对于搜索键值:
Begin Decla Function SearchKey(int k) int hash_v = HashFunc(k) if (ht[hash_v] == NULL) return -1 else ListHead *en = ht[hash_v] while (en != NULL and en->k != k) en= en->n if (en== NULL) return -1 else return en->v End
对于删除:
Begin Declare Function 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 and en->k != k) p = en en = en->n if (en->k== k) if (p == NULL) ListHead *n= en->n delete en; ht[hash_v] = n else ListHead *n= en->n delete en p->n = n End.
#include <iostream>
using 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 < T_S; i++) {
ht[i] = NULL;
}
}
int HashFunc(int k){
return k % T_S;
}
void 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);
}
}
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;
delete en;
ht[hash_v] = n;
}
else {
ListHead *n = en->n;
delete en;
p->n = n;
}
}
}
}
~HashMapTable() {
delete[] ht;
}
}
};
int main() {
HashMapTable hash;
int k, v;
int c;
while(1) {
cout<<"1.Insert element into the table"<<endl;
cout<<"2.Search element from the key"<<endl;
cout<<"3.Delete element at a key"<<endl;
cout<<"4.Exit"<<endl;
cout<<"Enter your choice: ";
cin>>c;
switch(c) {
case 1:
cout<<"Enter element to be inserted: ";
cin>>v;
cout<<"Enter key at which element to be inserted: ";
cin>>k;
hash.Insert(k, v);
break;
case 2:
cout<<"Enter key of the element to be searched: ";
cin>>k;
if (hash.SearchKey(k) == -1)
cout<<"No element found at key "<<k<<endl;
else {
cout<<"Elements at key "<<k<<" : ";
cout<<hash.SearchKey(k)<<endl;
}
break;
case 3:
cout<<"Enter key of the element to be deleted: ";
cin>>k;
if (hash.SearchKey(k) == -1)
cout<<"Key "<<k<<" is empty"<<endl;
else {
hash.Remove(k);
cout<<"Entry Removed"<<endl;
}
break;
case 4:
exit(1);
default:
cout<<"\nEnter correct option\n";
}
}
return 0;
}输出结果
1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 1 Enter element to be inserted: 1 Enter key at which element to be inserted: 2 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 1 Enter element to be inserted: 10 Enter key at which element to be inserted: 1 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 1 Enter element to be inserted: 7 Enter key at which element to be inserted: 6 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 1 Enter element to be inserted: 12 Enter key at which element to be inserted: 4 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 30 Enter correct option 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 1 Enter element to be inserted: 30 Enter key at which element to be inserted: 5 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 2 Enter key of the element to be searched: 6 Elements at key 6 : 7 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 3 Enter key of the element to be deleted: 1 Entry Removed 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 2 Enter key of the element to be searched: 6 Elements at key 6 : 7 1.Insert element into the table 2.Search element from the key 3.Delete element at a key 4.Exit Enter your choice: 4