哈希表(hash_table) 哈希存储 算法相关知识 稳定性 时间复杂度

news2024/11/23 20:13:41

哈希存储(散列存储)

为了快速定位数据

哈希表

哈希冲突 / 哈希矛盾

关键字不一样,但是映射之后结果一样

如何避免 哈希矛盾?

1、重新设计哈希函数,尽可能均匀散列分布在哈希表

2、开放定址法:向下寻找未存储的位置进行存放数据

3、链地址法: 将数据链表的首地址存入哈希表,只需将数据结点往链表后链接即可


#include "head.h"
#include "hash.h"

HASH_NODE *hash_table[HASH_SIZE] = {NULL};

int hash_fun(char ch)
{
	if(ch>'a' && ch<='z')
	{
		return ch - 'a';
	}
	else if(ch > 'A' && ch <= 'Z')
	{
		return ch - 'A';
	}
	else
	{
	   return HASH_SIZE - 1;
	}
}

/*建立haxi表插入数据*/
int insert_hash_table(DATA_TYPE data) 
{
	HASH_NODE *pnode = malloc(sizeof(HASH_NODE));
	if(NULL == pnode)
	{
		perror("fail malloc");
		return -1;
	}
	pnode->data = data;
	pnode->pnext = NULL;
	
	int addr = hash_fun(data.name[0]);
	
	pnode -> pnext = hash_table[addr];
	hash_table[addr]= pnode;
}



/* 遍历 */
void hash_table_for_each()
{
	int i = 0;
	
	for( i = 0; i<HASH_SIZE;i++)
	{
		HASH_NODE *ptmp = hash_table[i];
		while(ptmp!=NULL)
		{
			printf("%s ",ptmp->data.name);
			printf("%s ",ptmp->data.tel);
			printf("%s ",ptmp->data.addr);
			printf("%d ",ptmp->data.age);
			ptmp = ptmp -> pnext;
		}
		printf("\n");
	}
}
/*查找*/
void find_hash_table_message(char *name)
{
	HASH_NODE *ptmp = NULL;
	
	ptmp = hash_table[hash_fun(*name)];
	while(strcmp(ptmp->data.name,name)) 
	{
		ptmp=ptmp->pnext;
	}
	printf("===========================\n");
	printf("%s ",ptmp->data.name);
	printf("%s ",ptmp->data.tel);
	printf("%s ",ptmp->data.addr);
	printf("%d ",ptmp->data.age);
	printf("\n===========================\n");
}
/*销毁*/
int destory_hash_table()
{
	int i = 0;
	HASH_NODE *ptmp = NULL;
	for(i = 0; i<HASH_SIZE;i++)
	{
		while(hash_table[i]!=NULL)
		{
			ptmp = hash_table[i];
			hash_table[i] = ptmp->pnext;
			free(ptmp);
		}
	}
}

算法


解决特定问题求解步骤

算法的设计
1、正确性
        语法正确

        合法的输入能得到合理的结果

        对非法的输入,给出满足要求的规格说明;对精心选择,甚至刁难的测试都能正常运行,结果正确

2、可读性
        便于交流,阅读,理解,高内聚,低耦合

3、健壮性
        输入非法数据,能进行相应的处理,而不是产生异常

4、高效率
        时间复杂度

        执行这个算法所花时间的度量

将数据量增长和时间增长用函数表示出来,这个函数就叫做时间复杂度

一般用大O表示法:O(n) —— 时间复杂度是关于数据n的一个函数,随着n的增加,时间复杂度增长较慢的算法时间复杂度低

时间复杂度的计算规则
        1,用常数1 取代运行时间中的所有加法常数

        2,在修改后的运行函数中,只保留最高阶项。

        3,如果最高阶存在且系数不是1,则去除这个项相乘的常数。

5、低储存
         空间复杂度

    稳定性  一样的数经过排序 两个相等的数看其位置是否发生变换 未发生则稳定


        排序算法:           
    稳定  冒泡 for for if 交换  时间复杂度 O(n^2)
          
  不稳定  选择 O(n^2)
          
    稳定  插入 O(n^2)
          
  不稳定  快速 O(nlogn)
          
          二分查找 O(logn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1551153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

aardio - 【库】godking.plusSkin 设置plus样式

库名&#xff1a;godking.plusSkin 库文件下载工具&#xff1a;http://chengxu.online/show.asp?softid272 使用本库&#xff0c;可以快速设置plus样式。主要针对按钮样式进行快速批量设置。 部分用法如下&#xff1a; import win.ui; /*DSG{{*/ var winform win.form(tex…

C++初学者:如何优雅地写程序

我喜欢C语言的功能强大&#xff0c;简洁&#xff0c;我也喜欢C#的语法简单&#xff0c;清晰&#xff0c;写起来又方便好用。 一、为什么不用C语言写程序。 C语言用来做题目&#xff0c;考试研究是很方便的&#xff0c;但是用来写程序做软件&#xff0c;你就会发现&#xff0c…

Android中运动事件的处理

1.目录 目录 1.目录 2.前言 3.程序演示 4.第二种程序示例 5.扩展 2.前言 触摸屏&#xff08;TouchScreen&#xff09;和滚动球&#xff08;TrackBall&#xff09;是 Android 中除了键盘之外的主要输入设备。如果需要使用触摸屏和滚动球&#xff0c;主要可以通过使用运动事…

[DS]Polar靶场web(一)

静以养心&#xff0c;宽以养气。 跟着Dream ZHO大神学专升安的一天 swp 直接dirb扫出.index.php.swp的目录 function jiuzhe($xdmtql){return preg_match(/sys.*nb/is,$xdmtql);//如果包含以 "sys" 开始&#xff0c;后跟任意字符直到 "nb" 的字符串&…

[XG] HTTP

我希望风起&#xff0c;而你好像更希望风停。 闲来无事&#xff0c;跟着Z3r4y-CSDN博客大神学一学web吧 [NewStarCTF 2023]Begin of HTTP 1.题目要求使用GET方式来给ctf参数传入任意值&#xff0c;那就传吧。 2.又让以POST方式来传递secert参数&#xff0c;并且要找一下参数…

python--字符串和常见的方法

1.字符串对象 字符串 " 字符串 " """ 字符串 """ 字符串 str() #全局函数&#xff0c;将一个类型转化为字符串 len(字符串) #获取字符串长度 while 和 for 循环&#xff0c;遍历字符串 案例一&#xff1a;查看字…

ubuntu系统下如何使用vscode编译和调试#小白入门#

编程环境&#xff1a;ubuntu系统为18.04.1&#xff0c;vscode版本为1.66.2 一、VSCode切换中文显示&#xff1a; 1、vscode安装完成后启动,在左侧externsions中搜索“简体中文”插件&#xff0c;并完成安装&#xff1a; 2、选择右下角齿轮形状的"Manage"&#xff…

记·汇编语言、C语言分别写并链接

电脑是64位的&#xff0c;汇编语言是AT&T风格。风格不同的汇编语言&#xff0c;汇编时的指令是不同的。在我学习过程中带来了挺多麻烦。 C语言内容。hello.c #include <stdio.h>//声明汇编编写的函数 extern void print_hello();int main() {// 调用汇编函数print_…

蓝桥杯真题Day40 倒计时19天 纯练题!

蓝桥杯第十三届省赛真题-统计子矩阵 题目描述 给定一个 N M 的矩阵 A&#xff0c;请你统计有多少个子矩阵 (最小 1 1&#xff0c;最大 N M) 满足子矩阵中所有数的和不超过给定的整数 K? 输入格式 第一行包含三个整数 N, M 和 K. 之后 N 行每行包含 M 个整数&#xf…

机器学习模型——KNN

KNN的基本概念&#xff1a; KNN(K-Nearest Neighbor)就是k个最近的邻居的意思&#xff0c;即每个样本都可以用它最接近的k个邻居来代表。KNN常用来处理分类问题&#xff0c;但也可以用来处理回归问题。 核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某…

好物视频素材哪里找,下面推荐几个好用给大家

想要创作出精彩的好物视频&#xff0c;离不开优质的素材。在这里&#xff0c;我将介绍一些提供免费好物视频素材的网站&#xff0c;让你轻松找到所需素材。 首先&#xff0c;蛙学网&#xff08;https://www.waxuewang.com&#xff09;是一个提供高质量视频素材的网站&#xff…

Redis面试题-缓存雪崩、缓存穿透、缓存击穿问题

1 穿透: 两边都不存在&#xff08;皇帝的新装&#xff09; &#xff08;黑名单&#xff09; &#xff08;布隆过滤器&#xff09; 2 击穿&#xff1a;一个热点的key失效了&#xff0c;这时大量的并发请求直接到达数据库. &#xff08;提前预热&#xff09; 3 雪崩&#xff1a…

好物视频素材库免费下载去哪找?

你是不是在找抖音好物视频素材库免费的网站&#xff0c;可是不知道哪儿能找到&#xff1f;别急&#xff0c;我来给你推荐几个网站&#xff0c;保证让你找到满意的素材&#xff01; 首先&#xff0c;蛙学网&#xff08;https://www.waxuewang.com&#xff09;是一个提供高质量视…

电子价签通信协议解析:蓝牙5.0有何优势?

电子价签是一种新型的零售显示技术&#xff0c;它可以实时更新商品价格、促销信息等内容&#xff0c;为消费者提供更加便捷的购物体验。电子价签的通信协议是决定其性能的关键因素之一&#xff0c;而蓝牙5.0则是目前相对更适合电子价签的通信协议。 电子价签的工作模式 以云…

Notepad++:格式化json字符串(带转义)

目录 一、效果呈现 二、去除json字符串转义 三、格式化json字符串 一、效果呈现 格式化前 带字符串转义&#xff0c;带unicode编码字符 格式化后 二、去除json字符串转义 方法&#xff1a;采用Notepad的普通替换 第一&#xff1a;\"替换为" 第二&#xff1a;\\…

智能算法-遗传算法 学习笔记

适应度的计算可类别为神经网络的目标函数&#xff0c;但此算法属于无监督学习&#xff0c;宏观来讲为搜寻最优解&#xff08;梯度&#xff09;的方式不同&#xff1f; 但神经网络中好像并不存在变异操作&#xff08;参数矩阵突变&#xff09;&#xff1f; 交叉的话残差网络ResN…

第一性原理计算代码可使用1个月有效期,龙讯旷腾PWmat

龙讯旷腾系列产品正在陆续入驻国家超算互联网&#xff08;https://www.scnet.cn&#xff09;&#xff0c;有自己的网上商城了&#xff01;PWmat&#xff08;如果您喜欢命令行&#xff09;以及Q-FlowPWmat组合产品&#xff08;如果您喜欢用可视化工作流提交任务&#xff09;&…

iOS网络抓包工具全解析

摘要 本文将深入探讨iOS平台上常用的网络抓包工具&#xff0c;包括Charles、克魔助手、Thor和Http Catcher&#xff0c;以及通过SSH连接进行抓包的方法。此外&#xff0c;还介绍了克魔开发助手作为iOS应用开发的辅助工具&#xff0c;提供的全方面性能监控和调试功能。 在iOS应…

nodejs中使用WebScoket的简单示例

前言 WebScoket可以用来实现即时通信,一般用于通信聊天工具或者是需要实时接受数据等功能 在浏览器环境中,WebScoket是一个构造函数,需要new创建连接的实例; 在nodejs环境中,则需要使用ws模块来完成服务的创建。 示例 下面是可以直接使用的代码,不需要修改 node创建服务端…

31-3 文件包含漏洞 - 文件包含漏洞利用(CVE-2021-3019:Lanproxy 任意文件读取漏洞复现)

一、Lanproxy简介: lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,支持TCP流量转发,可支持任何TCP上层协议(访问内网网站、本地支付接口调试、SSH访问、远程桌面等)。 二、漏洞概述: Lanproxy1.0 版本存在目录遍历漏洞,可通过绕过路径限制(../)来…