C语言 uthash哈希使用范例的代码

在代码期间,将代码过程比较重要的代码段做个收藏,如下的代码内容是关于C语言 uthash哈希使用范例的代码,应该对码农有些好处。 

#include "uthash.h"
#include <stdio.h>
#include <stdlib.h>
struct packet
{
	char msg[10]; 
};

int main()
{
	int i;

	printf ("hash count = %d n", HASH_COUNT(hash_packet));

	for (i=0; i<10; i++)
	{
		pkt->key = i;
		sprintf (pkt->msg, "i=%d", i);

		HASH_FIND_INT(hash_packet, &i, tmp);
		if (tmp != NULL)
		{
			printf ("The key(%d) exists in hash. n", i);
			continue;
		}
		HASH_ADD_INT(hash_packet, key, pkt);
		printf ("insert item. key=%d,value=%p n", i, pkt);
	}
	printf ("hash count = %d n", HASH_COUNT(hash_packet));

	for (i=0; i<13; i++)
	{
		HASH_FIND_INT(hash_packet, &i, tmp);
		if (tmp == NULL)
		{
			printf ("find not item. key=%d,value=%p n", i, tmp);
			continue;
		}
		printf ("find item. key=%d,value=%p n", i, tmp);
	}

	printf ("hash count = %d n", HASH_COUNT(hash_packet));

		printf (" %d => %s n", mytemp->key, mytemp->msg);
	for (i=0; i<13; i++)
	{
		HASH_FIND_INT(hash_packet, &i, tmp);
		if (tmp == NULL)
		{
			printf ("find not item. key=%d,value=%p n", i, tmp);
			continue;
		}
		HASH_DEL(hash_packet, tmp);
		free(tmp);
		printf ("delete itme. key=%d,value=%p n", i, tmp);
	}
	printf ("hash count = %d n", HASH_COUNT(hash_packet));

	system("pause");
	return 0;
}     复制代码
                                                                                                                                       


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用 C 语言宏定义实现的哈希表(类似于 uthash)的示例代码: ```c #include <stdio.h> #include <stdlib.h> /* 定义哈希表结构体 */ #define HASH_TABLE(name, key_type, value_type) \ typedef struct name##_entry { \ key_type key; \ value_type value; \ struct name##_entry *next; \ } name##_entry; \ typedef struct { \ int size; \ name##_entry **table; \ } name /* 初始化哈希表 */ #define HASH_TABLE_INIT(table, size) \ do { \ (table)->size = size; \ (table)->table = calloc(size, sizeof(*(table)->table)); \ } while (0) /* 释放哈希表 */ #define HASH_TABLE_FREE(table) \ do { \ int i; \ for (i = 0; i < (table)->size; i++) { \ name##_entry *entry = (table)->table[i]; \ while (entry) { \ name##_entry *next = entry->next; \ free(entry); \ entry = next; \ } \ } \ free((table)->table); \ } while (0) /* 查找键对应的值 */ #define HASH_TABLE_GET(table, key, default) \ ({ \ int index = (key) % (table)->size; \ name##_entry *entry = (table)->table[index]; \ while (entry) { \ if ((entry)->key == (key)) { \ break; \ } \ entry = entry->next; \ } \ (entry) ? (entry)->value : (default); \ }) /* 设置键对应的值 */ #define HASH_TABLE_SET(table, key, value) \ do { \ int index = (key) % (table)->size; \ name##_entry *entry = (table)->table[index]; \ while (entry) { \ if ((entry)->key == (key)) { \ (entry)->value = (value); \ break; \ } \ entry = entry->next; \ } \ if (!entry) { \ entry = calloc(1, sizeof(*entry)); \ entry->key = (key); \ entry->value = (value); \ entry->next = (table)->table[index]; \ (table)->table[index] = entry; \ } \ } while (0) /* 删除键对应的值 */ #define HASH_TABLE_DEL(table, key) \ do { \ int index = (key) % (table)->size; \ name##_entry *entry = (table)->table[index]; \ name##_entry *prev = NULL; \ while (entry) { \ if ((entry)->key == (key)) { \ if (prev) { \ prev->next = entry->next; \ } else { \ (table)->table[index] = entry->next; \ } \ free(entry); \ break; \ } \ prev = entry; \ entry = entry->next; \ } \ } while (0) /* 示例用法 */ HASH_TABLE(my_hash_table, int, char *); int main() { my_hash_table table; HASH_TABLE_INIT(&table, 10); HASH_TABLE_SET(&table, 1, "one"); HASH_TABLE_SET(&table, 2, "two"); HASH_TABLE_SET(&table, 3, "three"); printf("%s\n", HASH_TABLE_GET(&table, 1, "not found")); printf("%s\n", HASH_TABLE_GET(&table, 2, "not found")); printf("%s\n", HASH_TABLE_GET(&table, 3, "not found")); HASH_TABLE_DEL(&table, 2); printf("%s\n", HASH_TABLE_GET(&table, 1, "not found")); printf("%s\n", HASH_TABLE_GET(&table, 2, "not found")); printf("%s\n", HASH_TABLE_GET(&table, 3, "not found")); HASH_TABLE_FREE(&table); return 0; } ``` 这个示例代码定义了一个名为 `my_hash_table` 的哈希表类型,其中键的类型为 `int`,值的类型为 `char *`。通过使用宏定义来实现,可以方便地在其他代码使用这个哈希表类型,并调用宏定义中定义的函数来操作哈希表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值