c语言实现哈希,C语言实现哈希表

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值