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

哈希存储(散列存储)

为了快速定位数据

哈希表

哈希冲突 / 哈希矛盾

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

如何避免 哈希矛盾?

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.mfbz.cn/a/498973.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《Invariant Feature Learning for Generalized Long-Tailed Classification》阅读笔记

论文标题 《Invariant Feature Learning for Generalized Long-Tailed Classification》 广义长尾分类的不变特征学习 作者 Kaihua Tang、Mingyuan Tao、Jiaxin Qi、Zhenguang Liu 和 Hanwang Zhang 来自南洋理工大学、阿里达摩院和浙江大学 初读 摘要 属性不平衡&#…

基于 FFmpeg 和 SDL 的音视频同步播放器

基于 FFmpeg 和 SDL 的音视频同步播放器 基于 FFmpeg 和 SDL 的音视频同步播放器前置知识音视频同步简介复习DTS、PTS和时间基 程序框架主线程解复用线程音频解码播放线程视频解码播放线程 音视频同步逻辑源程序结果工程文件下载参考链接 基于 FFmpeg 和 SDL 的音视频同步播放器…

vue 元素拖动,复制,已复制元素可移动,快捷方便,已解决

注意&#xff1a;使用当前组件时&#xff0c;请先了解组件代码逻辑 下方组件根据自己的需求来更改响应的元素id&#xff0c;调整代码实现逻辑&#xff0c;这里不过多解释 import Vue from "vue";/*** 拖拽*/ Vue.directive("Drag", (el) > {const move…

MySQL---函数

目录 一、概述 二、字符串函数 三、数值函数 四、日期函数 五、流程函数 一、概述 函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着&#xff0c;这一段程序或代码在MySQL 中 已经给我们提供了&#xff0c;我们要做的就是在合适的业务场景调用对应的函数完…

课堂练习:环境体验——Linux 文件操作命令

任务描述 第二个任务就是了解Linxu的文件查看命令&#xff0c;文件编辑基本命令。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 1.文件查看命令。 2.文件编辑基本命令。 文件查看命令 我们要查看一些文本文件的内容时&#xff0c;要使用文本编辑器来查看…

vue3+ts白屏问题解决

文章目录 打开白屏解决方法可能出现问题使用base导致的使用baseUrl导致的 注意点vue3ts白屏问题知识分享 打开白屏 解决方法 在vue.config.js页面 添加publicPath:./, const { defineConfig } require(vue/cli-service)module.exports defineConfig({ transpileDependenci…

MATLAB:优化与规划问题

一、线性规划 % 线性规划&#xff08;Linear programming, 简称LP&#xff09; fcoff -[75 120 90 105]; % 目标函数系数向量 A [9 4 7 54 5 6 105 10 8 53 8 9 77 6 4 8]; % 约束不等式系数矩阵 b [3600 2900 3000 2800 2200]; % 约束不等式右端向量 Aeq []; % 约束等式系…

搭建本地局域网域名并配置本地的mqtt服务器

1. 第一步&#xff1a; 首先准备一台windows电脑&#xff0c;安装 Technitium DNS Server 链接如下&#xff1a; Technitium DNS Server | An Open Source DNS Server For Privacy & Security 启动 start 然后进入 http://localhost:5380/ 下载完成之后&#xff0c;需要…

数字三角形 Number Triangles

题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 在上面的样例中&#xff0c;从 7 → 3 → 8 → 7 → 5 7 \to 3 \to 8 \to 7 \to 5 7→3→8→7→5 的…

【JAVAEE学习】探究Java中多线程的使用和重点及考点

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

vue 内嵌第三方网页

需要将另一个系统嵌套到当前网页中 一、frame 方法一就是通过html的标签 iframe 实现网页中嵌入其他网站 标签属性 属性含义src嵌套的网页地址width设置嵌套网页的宽度&#xff0c;单位为像素height设置嵌套网页的高度&#xff0c;单位为像素frameborder控制嵌套的网页是否…

【CC工具箱1.2.5】更新_免费无套路,70+个工具

CC工具箱目前已经更新到1.2.5版本&#xff0c;完全免费无套路。 适用版本ArcGIS Pro 3.0及以上。 欢迎大家使用&#xff0c;反馈bug&#xff0c;以及提出需求和意见&#xff0c;时间和能力允许的话我会尽量满足要求。 如有关于工具的使用问题和需求建议&#xff0c;可以加下…

使用unplugin-auto-import页面不引入api飘红

解决方案&#xff1a;. tsconfig.json文件夹加上 {"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"module": "ESNext","lib": ["ES2020", "DOM", &q…

使用Python进行微服务架构的设计与实现【第159篇—微服务架构】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行微服务架构的设计与实现 在当今软件开发领域中&#xff0c;微服务架构已经成…

结构体,联合体,枚举( 1 )

目录 前言 1.结构体 1.1结构体的声明 1.2结构体变量的创建和初始化 1.3结构体成员的访问字符 1.4结构体的内存大小 1.4.1对齐规则 1.5结构体传参 前言 在编程的世界里&#xff0c;数据结构的选择对于程序的效率和可读性有着至关重要的影响。不同的数据结构适用于不同的…

华为WATCH 4是怎么监测我们健康的?真的有用吗?

最近&#xff0c;总听到身边的朋友说手表帮他们发现了不少健康的问题&#xff0c;所以我也想整一个来试试看。看了很多款手表后&#xff0c;发现华为WATCH 4还挺符合我的需求&#xff0c;它有一系列超实用的健康监测功能&#xff0c;可以说是随身的健康小助手。 先来说说心脏…

企微侧边栏开发(内部应用内嵌H5)

一、背景 公司的业务需要用企业微信和客户进行沟通&#xff0c;而客户的个人信息基本都存储在内部CRM系统中&#xff0c;对于销售来说需要一边看企微&#xff0c;一边去内部CRM系统查询&#xff0c;比较麻烦&#xff0c;希望能在企微增加一个侧边栏展示客户的详细信息&#xf…

电脑最高可以装多少内存?电脑内存怎么装?

大家好&#xff0c;我是来自兼容性之家的&#xff01; 通常我们的家用电脑主机有8到16GB的运行内存。 极少数高端用户会使用32至64GB内存。 比较高端的工作站的内存在128GB左右。 同时&#xff0c;家用电脑的硬盘容量约为1TB。 那么你有没有想过一台电脑可以拥有的最大内存量…

网站业务对接DDoS高防

准备需要接入的网站域名清单&#xff0c;包含网站的源站服务器IP&#xff08;仅支持公网IP的防护&#xff09;、端口信息等。所接入的网站域名必须已完成ICP备案。如果您的网站支持HTTPS协议访问&#xff0c;您需要准备相应的证书和私钥信息&#xff0c;一般包含格式为.crt的公…

Kafka入门到实战-第二弹

Kafka入门到实战 Kafka快速开始官网地址Kafka概述Kafka术语Kafka初体验更新计划 Kafka快速开始 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流…
最新文章