#include
#include
#include
typedef struct _NODE
{
int data;
struct _NODE* next;
}NODE;
typedef struct _HASH_TABLE
{
NODE* value[10];
}HASH_TABLE;
HASH_TABLE* create_hash_table()
{
HASH_TABLE* pHashTbl = (HASH_TABLE*)malloc(sizeof(HASH_TABLE));
memset(pHashTbl, 0, sizeof(HASH_TABLE));
return pHashTbl;
}
NODE* find_data_in_hash(HASH_TABLE* pHashTbl, int data)
{
if(NULL == pHashTbl)
{
return NULL;
}
NODE* pNode = pHashTbl->value[data % 10];
if(NULL == pNode)
{
return NULL;
}
while(pNode)
{
if(data == pNode->data)
{
return pNode;
}
pNode = pNode->next;
}
return NULL;
}
int insert_data_into_hash(HASH_TABLE* pHashTbl, int data)
{
NODE* pNode;
if(NULL == pHashTbl)
{
return 0;
}
if(NULL == pHashTbl->value[data % 10])
{
pNode = (NODE*)malloc(sizeof(NODE));
memset(pNode, 0, sizeof(NODE));
pNode->data = data;
pHashTbl->value[data % 10] = pNode;
return 1;
}
if(NULL != find_data_in_hash(pHashTbl, data))
{
return 0;
}
pNode = pHashTbl->value[data % 10];
while(NULL != pNode->next)
{
pNode = pNode->next;
}
pNode->next = (NODE*)malloc(sizeof(NODE));
memset(pNode->next, 0, sizeof(NODE));
pNode->next->data = data;
return 1;
}
int delete_data_from_hash(HASH_TABLE* pHashTbl, int data)
{
NODE* pHead;
NODE *pNode;
if(NULL == pHashTbl || NULL == pHashTbl->value[data % 10])
{
return 0;
}
pNode = find_data_in_hash(pHashTbl, data);
if(NULL == pNode)
{
return 0;
}
if(pNode == pHashTbl->value[data % 10])
{
pHashTbl->value[data % 10] = pNode->next;
goto final;
}
pHead = pHashTbl->value[data % 10];
while(pNode != pHead ->next)
{
pHead = pHead->next;
}
pHead->next = pNode->next;
final:
free(pNode);
return 1;
}
void main()
{
HASH_TABLE *ht = create_hash_table();
int flag = insert_data_into_hash(ht, 1);
printf("insert status: %d\n", flag);
flag = insert_data_into_hash(ht,11);
printf("insert status: %d\n", flag);
flag = insert_data_into_hash(ht,111);
printf("insert status: %d\n", flag);
flag = insert_data_into_hash(ht,11);
printf("insert status: %d\n", flag);
NODE *node = find_data_in_hash(ht, 111);
if(node)
{
printf("%d has been found!\n",node->data);
}
node = find_data_in_hash(ht, 20);
if(node)
{
printf("%d has been found!\n",node->data);
}
flag = delete_data_from_hash(ht, 111);
printf("delete status: %d\n", flag);
}
运行结果:
insert status: 1
insert status: 1
insert status: 1
insert status: 0
111 has been found!
delete status: 1