C++哈希表头⽂件#ifndef _HASHTABLE_H_
#define _HASHTABLE_H_
#include <iostream>
#include <cstdlib>
using namespace std;
typedef
enum {
Empty, Active, Deleted
}kindofitem;
typedef struct
{
int key;
}datatype;
typedef struct{
datatype data;
kindofitem info;
}hashitem;
typedef struct{
hashitem* arr;
int table_size;
int current_size;
}hashtable;
int initiate(hashtable* hash, int size);//初始化哈希表
int find(hashtable* hash, datatype x);//查x元素对应的关键字
int insert(hashtable* hash, datatype x);//像哈希表中插⼊数组元素x,及设置它对应的关键字
int deleted(hashtable* hash, datatype x);//从哈希表中删除x数据元素
void destroy(hashtable* hash);//撤销函数
/*
int main()
{
system("pause");
return 0;
}
*/
int initiate(hashtable* hash, int size)
{
hash->arr = (hashitem*)malloc(sizeof(hashitem)*size);//初始化,该数组
hash->table_size = size;
if (hash->arr == NULL)
{
cout << "初始化失败" << endl;
return0;
}
else
{
hash->current_size = 0;
return1;
}
}
int find(hashtable* hash, datatype x)//查x元素对应的关键字
{
int i = x.key%hash->table_size;
int j = i;
while (hash->arr[j].info == Active&&hash->arr[j].data.key != x.key)
{
j = (j + 1)&hash->table_size;//⽤哈希冲突⽅法继续查
if (j == i)
{
cout << "遍历此哈希表,没有到" << endl;
return -hash->table_size;
}
}
if (hash->arr[j].info == Active)
{
return j;
}
else{
return -j;
}
}
int insert(hashtable* hash, datatype x)
{
system的头文件
int i = find(hash, x);
if (i > 0)
{
cout << "该数据元素已经存在了!" << endl;
return0;
}
else if (i != -hash->table_size)
{
hash->arr[-i].data = x;
hash->arr[-i].info = Active;
hash->current_size++;
return1;
}
else{
return0;
}
}
int deleted(hashtable* hash, datatype x)
{
int i = find(hash, x);
if (i > 0)
{
hash->arr[i].info = Deleted;
hash->current_size--;
return1;
}
else{
cout << "没有这个元素,⽆法删除!" << endl;
return0;
}
}
void destroy(hashtable* hash)
{
delete[]hash->arr;
}
#endif

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。