#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#define SIZE_KEY 32
#define SIZE_VALUE 256
#define DEFAULT_TABLESIZE 101
using namespace std;
typedef struct Metadata
{
Metadata(char* key, char* value)
{
strcpy(this->key, key);
}
char key[ SIZE_KEY ];
char value[ SIZE_VALUE ];
struct Metadata* next;
}METADATA;
class CHashtable
{
private:
int m_nTableSize;
METADATA** table;
int m_nSize;
long HashString(char* key);
METADATA* Find(char* key);
METADATA* m_pCurrent_Entry;
int m_nCurrent_Index;
public:
CHashtable(int nTablesize=DEFAULT_TABLESIZE );
virtual ~CHashtable();
bool Put(char* key, char* value);
bool Get(char* key, char* value);
bool Contains(char* key);
bool Remove(char* key);
void RemoveAll();
int GetSize();
void InitIterator();
bool HasNext();
void GetNextKey(char* key);
};
CHashtable::CHashtable(int nTableSize)
{
m_nSize = 0;
this->m_nTableSize = nTableSize;
table = new METADATA*[m_nTableSize];
for(int i=0; i<m_nTableSize; i++)
{
table[i] = NULL;
}
}
CHashtable::~CHashtable()
{
}
bool CHashtable::Put(char* key, char* value)
{
}
METADATA* CHashtable::Find(char* key)
{
int bucket = HashString(key);
METADATA* temp = table[bucket];
while( temp != NULL )
{
if(strcmp(key, temp->key) == 0)
{
return temp;
}
temp = temp->next;
}
return NULL;
}
void CHashtable::InitIterator()
{
m_pCurrent_Entry = NULL;
m_nCurrent_Index = m_nTableSize;
for(int i=0; i<m_nTableSize; i++)
{
if(table[i] == NULL)
{
continue;
}
else
{
m_pCurrent_Entry = table[i];
m_nCurrent_Index = i;
break;
}
}
}
long CHashtable::HashString(char* key)
{
int n = strlen(key);
long h = 0;
for( int i=0; i<n; i++ )
{
h = (h << 2) + key[i];
}
return abs(h % m_nTableSize);
}
int main(int argc, char** argv)
{
system("pause");
return 0;
}
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#define SIZE_KEY 32
#define SIZE_VALUE 256
#define DEFAULT_TABLESIZE 101
using namespace std;
typedef struct Metadata
{
Metadata(char* key, char* value)
{
strcpy(this->key, key);
}
char key[ SIZE_KEY ];
char value[ SIZE_VALUE ];
struct Metadata* next;
}METADATA;
class CHashtable
{
private:
int m_nTableSize;
METADATA** table;
int m_nSize;
long HashString(char* key);
METADATA* Find(char* key);
METADATA* m_pCurrent_Entry;
int m_nCurrent_Index;
public:
CHashtable(int nTablesize=DEFAULT_TABLESIZE );
virtual ~CHashtable();
bool Put(char* key, char* value);
bool Get(char* key, char* value);
bool Contains(char* key);
bool Remove(char* key);
void RemoveAll();
int GetSize();
void InitIterator();
bool HasNext();
void GetNextKey(char* key);
};
CHashtable::CHashtable(int nTableSize)
{
m_nSize = 0;
this->m_nTableSize = nTableSize;
table = new METADATA*[m_nTableSize];
for(int i=0; i<m_nTableSize; i++)
{
table[i] = NULL;
}
}
CHashtable::~CHashtable()
{
}
bool CHashtable::Put(char* key, char* value)
{
}
METADATA* CHashtable::Find(char* key)
{
int bucket = HashString(key);
METADATA* temp = table[bucket];
while( temp != NULL )
{
if(strcmp(key, temp->key) == 0)
{
return temp;
}
temp = temp->next;
}
return NULL;
}
void CHashtable::InitIterator()
{
m_pCurrent_Entry = NULL;
m_nCurrent_Index = m_nTableSize;
for(int i=0; i<m_nTableSize; i++)
{
if(table[i] == NULL)
{
continue;
}
else
{
m_pCurrent_Entry = table[i];
m_nCurrent_Index = i;
break;
}
}
}
long CHashtable::HashString(char* key)
{
int n = strlen(key);
long h = 0;
for( int i=0; i<n; i++ )
{
h = (h << 2) + key[i];
}
return abs(h % m_nTableSize);
}
int main(int argc, char** argv)
{
system("pause");
return 0;
}
本文介绍了一个简单的哈希表实现,包括插入、查找等基本操作。使用C++进行编码,并提供了完整的源代码。通过该实现可以了解哈希表的工作原理及冲突解决办法。
1万+

被折叠的 条评论
为什么被折叠?



