当前位置: 首页 > news >正文

滨江道做网站公司南京马鞍山网站建设

滨江道做网站公司,南京马鞍山网站建设,黄浦区网站建设,郑州近期重大新闻1. uthash简介开源的第三方头文件,这只是一个头文件:uthash.h。uthash还包括三个额外的头文件,主要提供链表,动态数组和字符串。utlist.h为C结构提供了链接列表宏。utarray.h使用宏实现动态数组。utstring.h实现基本的动态字符串。…

1. uthash简介

开源的第三方头文件,这只是一个头文件:uthash.h。

uthash还包括三个额外的头文件,主要提供链表,动态数组和字符串。utlist.h为C结构提供了链接列表宏。utarray.h使用宏实现动态数组。utstring.h实现基本的动态字符串。

2 uthash的使用

2.1 定义结构体

2.2 添加

2.3 查找

2.4 替换

2.5 删除

2.6 循环删除

2.7 删除哈希表所有元素

2.8 计算哈希表元素个数

2.9 遍历哈希表中的所有项目

2.10 排序哈希表


2.1 定义结构体

#include "uthash.h"
struct my_struct {int id;                    /* key */char name[10];UT_hash_handle hh;         /* makes this structure hashable */
};
/*声明哈希为NULL指针*/
struct my_struct *users = NULL;    /* important! initialize to NULL */
当结构体中的键值为字符串数组时
struct my_struct {char name[10];             /* key (string is WITHIN the structure) */int id;UT_hash_handle hh;         /* makes this structure hashable */
};
当结构体中的键值为字符串指针时
struct my_struct {const char *name;          /* key */int id;UT_hash_handle hh;         /* makes this structure hashable */
};

2.2 添加

  HASH_ADD_INT表示添加的键值为int类型

  HASH_ADD_STR表示添加的键值为字符串类型

  HASH_ADD_PTR表示添加的键值为指针类型

  HASH_ADD表示添加的键值可以是任意类型

void add_user(int user_id, char *name) {struct my_struct *s;/*重复性检查,当把两个相同key值的结构体添加到哈希表中时会报错*/HASH_FIND_INT(users, &user_id, s);  /* id already in the hash? *//*只有在哈希中不存在ID的情况下,我们才创建该项目并将其添加。否则,我们只修改已经存在的结构。*/if (s==NULL) {s = (struct my_struct *)malloc(sizeof *s);s->id = user_id;HASH_ADD_INT( users, id, s );  /* id: name of key field */}strcpy(s->name, name);
}

2.3 查找

struct my_struct *find_user(int user_id) {struct my_struct *s;s = (struct my_struct *)malloc(sizeof *s);HASH_FIND_INT( users, &user_id, s );  /* s: output pointer */return s;
}

2.4 替换

void replace_user(HashHead *head, HashNode *newNode) {HashNode *oldNode = find_user(*head, newNode->id);if (oldNode)HASH_REPLACE_INT(*head, id, newNode, oldNode);
}

2.5 删除

要从哈希表中删除结构,必须具有指向它的指针。(如果只有键,请先执行HASH_FIND以获取结构指针)。

void delete_user(struct my_struct *user) {HASH_DEL(users, user);  /* user: pointer to deletee */free(user);             /* optional; it's up to you! */
}

2.6 循环删除

HASH_ITER是一个宏定义,程序执行时被替换为一个循环

void delete_all() {struct my_struct *current_user, *tmp;HASH_ITER(hh, users, current_user, tmp) {HASH_DEL(users,current_user);  /* delete; users advances to next */free(current_user);            /* optional- if you want to free  */}
}

2.7 删除哈希表所有元素

如果您只想删除所有项目,但不释放它们或进行每个元素的清理,则可以通过一次操作更有效地做到这一点:

HASH_CLEAR(hh,users);

2.8 计算哈希表元素个数

unsigned int num_users;
num_users = HASH_COUNT(users);
printf("there are %u users\n", num_users);

2.9 遍历哈希表中的所有项目

void print_users() {struct my_struct *s;for(s=users; s != NULL; s=s->hh.next) {printf("user id %d: name %s\n", s->id, s->name);}
}

2.10 排序哈希表

HASH_SORT( users, name_sort );

http://www.yayakq.cn/news/42109/

相关文章:

  • 哪个网站做黄金交易最好wordpress add option
  • 汽车专业网站网站后台如何上传文件
  • 茶文化网站设计免费企业微信app下载安装不了
  • 惠州市+网站开发公司阿里云服务器开源做几个网站
  • 国内外网站建设比较wordpress 评论 邮件
  • 小学校园门户网站建设腾讯企业邮箱登录入口手机版
  • 一个企业建设网站的目的安装下载应用
  • 网站公司网站定制wordpress游戏插件
  • 网站建设需要多少钱网站建设的用途是什么意思
  • 如何设计营销型网站建设wordpress 外贸企业模板
  • wordpress ai手机seo网站推广
  • 成都网站建设 3e网站建设视频直播软件有哪些
  • 网站建设费属于广告费用吗宣传商务型的网站
  • 长沙网站设计我选刻营销软文500字
  • 做网站需要跟客户了解什么百度推广费用一年多少钱
  • 如果做好网站社区的建设建设外围彩票网站
  • 公司网站建设小知识网站模版如何建
  • 网站例子WordPress网站论文
  • 多语言企业网站建设网站建设面板
  • 市级档案网站建设情况分析app定制系统开发
  • 美橙专业建站网站开发综合实训总结
  • 闵行手机网站建设低价刷粉网站推广
  • 湖州集团网站建设win7 iis搭建网站教程
  • 建行的官方网站吗高校网站建设招标公告
  • 嘉盛集团官方网站长业建设网站
  • 中通建设工程管理公司网站在百度做网站怎么做
  • 包头教育平台网站建设丹东 建设集团 招聘信息网站
  • 重生做皇帝小说网站wordpress动漫模板
  • 浙江交工宏途交通建设有限公司网站6有个网站叫设计什么
  • 药企网站怎么做建立网站链接结构的基本方式有哪些