데이터 구조: 해시 표 (잔여 법 제외 - 체인 주소 법)
1853 단어 데이터 구조
#include
using namespace std;
// :
// :
typedef struct _NODE
{
int key;
struct _NODE* next;
}_NODE;
typedef struct Hash_Table
{
_NODE* pChainHash[13];
}Hash_Table;
//
Hash_Table* InitHashTable()
{
Hash_Table* pHashTable = new Hash_Table;
memset( pHashTable, 0, sizeof(Hash_Table) );
return pHashTable;
}
//
_NODE* FindDataInHash( Hash_Table* pHashTable, int key )
{
if ( !pHashTable )
return NULL;
_NODE* pNode = NULL;
if ( !(pNode = pHashTable->pChainHash[ key % 13 ] ) )
return NULL;
while ( pNode )
{
if ( pNode->key == key )
return pNode;
pNode = pNode->next;
}
return NULL;
}
//
bool InsertDataToHash( Hash_Table* pHashTable, int key )
{
if ( !pHashTable )
return false;
if ( NULL != FindDataInHash( pHashTable, key ) )
return false;//
_NODE* pNewNode = new _NODE;
memset( pNewNode, 0, sizeof( _NODE ) );
pNewNode->key = key;
_NODE* pNode = NULL;
pNode = pHashTable->pChainHash[ key % 13 ];
if ( !pNode )
{
pHashTable->pChainHash[ key % 13 ] = pNewNode;
}
else
{
while( pNode->next )
{
pNode = pNode->next;
}
pNode->next = pNewNode;
}
return true;
}
//
bool DeleteDataInHash( Hash_Table* pHashTable, int key )
{
if ( !pHashTable )
return false;
_NODE* pNode = NULL;
if ( !( pNode = pHashTable->pChainHash[key % 13] ) )//
return false;
if ( pNode->key == key )//
{
pHashTable->pChainHash[key % 13] = pNode->next;
delete pNode;
return true;
}
_NODE* pPreNode = pNode;// ,
pNode = pNode->next;
while ( pNode )
{
if ( pNode->key == key )
{
pPreNode->next = pNode->next;
delete pNode;
return true;
}
pPreNode = pNode;
pNode = pNode->next;
}
return false;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.