自建哈希表

C语言实现两数之和:哈希表设计与内存管理实战解析 在数据结构与算法的学习中,哈希表是一种以空间换时间的经典设计,能够在平均O(1)复杂度内完成查找操作,是解决大量线性查找问题的核心工具。C语言因为没有标准库哈希表,开发者往往需要自行设计哈希函数、处理冲突策略并管理动态内存,这使许多刚接触算法刷题的初学者感到棘手。两数之和作为LeetCode的入门题目,恰好涵盖了这些关键工程问题:如何返回正确格式的下标、如何避免局部数组悬空指针、如何处理重复元素与负数取模边界。本文以该题的C语言源码为例,梳理暴力解到哈希解的优化路径,剖析开放寻址法的实现细节,并总结内存泄漏 阅读详情
class LinkList():
	class Node():        
		def __init__(self,item=None):
			self.item=item 
			self.next=None
    	class LinkListIterator():        
    		def __init__(self,node):
    			self.node=node        
    		def next(self):            
    			if self.node:
    		                cur_node=self.node                
    		                self.node=cur_node.next                
    		                return cur_node.item            
    		        else:                
    		        	raise StopIteration        
    		 def __iter__(self):            
    		 	return self
    	def __init__(self):
    	        self.head=None
    	def append(self,item):
    	        node=self.Node(item)
    	        if not self.head:
    	        	self.head=node        
    	       	else:            
    	       		node.next=self.head
    	       		self.head=node    
   	def delete(self,obj):        
   		CurNode=self.head        
   		while CurNode:
   		            if CurNode.next.item==obj:
   		                            CurNode.next=CurNode.next.next
   		                            return True            
   		            CurNode=CurNode.next        
   		else:
   		            raise IndexError('linklist have no num %d'%obj)    
 	def find(self,obj):
 	        for n in self:
 	        	if n==obj:
 	               		return True
 	                else:            
 	                    	return False    
 	def __iter__(self):
 	        return self.LinkListIterator(self.head)
    	def __repr__(self):
    	        return '<<'+','.join(map(str,self))+'>>'
class HashTable():
    def __init__(self,size):#hashtable len:size
        self.size=size
        self.hashtable=[LinkList() for i in range(size)]    
    def append(self,item):
        self.hashtable[self.hash_func(item)].append(item)    
    def hash_func(self,item):
        return item%self.size
    def __repr__(self):        
    	return ','.join(map(str,self.hashtable))    
    def delete(self,obj):        
    	k=self.hash_func(obj)        
    	if self.hashtable[k].find(obj):            
    		self.hashtable[k].delete(obj)            
    		return True        
    	else:            
    		raise IndexError('hashtable have no num %d'%obj) 
    def find(self,obj):
        k=self.hash_func(obj)
        for n in self.hashtable[k]:
        	if n==obj:
                	return True        
	else:            
        	return False


ll=LinkList()
ll.append(1)
ll.append(2)
ll.append(3)
ll.append(4)
ll.append(5)
print ll
print ll.find(3)
ll.delete(3)
print ll
h=HashTable(10)
for i in range(100):
    h.append(i)
    print h
    print h.find(44)
    h.delete(44)
    print h
    print h.find(44)
    h.delete(111)

头插链表,长度为size的哈希表。(这个代码对齐方式我真的搞不定。。)
输出结果:
<<5,4,3,2,1>>
True
<<5,4,2,1>>
<<90,80,70,60,50,40,30,20,10,0>>,<<91,81,71,61,51,41,31,21,11,1>>,<<92,82,72,62,52,42,32,22,12,2>>,<<93,83,73,63,53,43,33,23,13,3>>,<<94,84,74,64,54,44,34,24,14,4>>,<<95,85,75,65,55,45,35,25,15,5>>,<<96,86,76,66,56,46,36,26,16,6>>,<<97,87,77,67,57,47,37,27,17,7>>,<<98,88,78,68,58,48,38,28,18,8>>,<<99,89,79,69,59,49,39,29,19,9>>
True
<<90,80,70,60,50,40,30,20,10,0>>,<<91,81,71,61,51,41,31,21,11,1>>,<<92,82,72,62,52,42,32,22,12,2>>,<<93,83,73,63,53,43,33,23,13,3>>,<<94,84,74,64,54,34,24,14,4>>,<<95,85,75,65,55,45,35,25,15,5>>,<<96,86,76,66,56,46,36,26,16,6>>,<<97,87,77,67,57,47,37,27,17,7>>,<<98,88,78,68,58,48,38,28,18,8>>,<<99,89,79,69,59,49,39,29,19,9>>
False
Traceback (most recent call last):
File “1.py”, line 418, in
h.delete(111)
File “1.py”, line 390, in delete
raise IndexError(‘hashtable have no num %d’%obj)
IndexError: hashtable have no num 111

小鹏P7车载以太网诊断实战:从OBD口定义到DoIP协议验证 本文详细解析了小鹏P7车载以太网诊断的实战过程。从OBD接口的针脚定义入手,依据ISO13400标准,确认了以太网线对位置,并指导制作专用的RJ45转OBD线束。通过搭建测试环境,使用Ping、端口扫描及Wireshark抓包,最终成功验证了车辆对DoIP协议的支持,为基于以太网的高速诊断与刷写提供了完整的技术路径。 阅读详情

相关推荐

北京途游游戏后端开发面经

北京途游游戏后端开发面经 我面试岗位是基于Python的后端开发工程师,主要是搞游戏的服务器开发。面试一共分了两轮,之后说是看看其他的候选人再定,感觉凉凉~~ 由于受到此次新型冠状病毒疫情的影响,本次面试采用视频面试的方式,下面是面试的时候面试官提的问题,python的基础知识还是问的比较多的。  一面:(32分钟微信视频)  简单做下自我介绍,   1.说一下你开发过的项目,挑一个说下你都做了...

weixin_45603043的博客 2126

资源 编程

Leetcode Database 全部练习题及题解 (按题目难易程度) https://zhuanlan.zhihu.com/p/265354299 Leetcode数据库题目题解 目录——mysql https://www.jianshu.com/p/6555578f9c30

global_coding的博客 4019

【RS】哨兵系列数据下载(哨兵2号Sentinel-2波段介绍、下载)

以哨兵二号为示例,分享如何下载欧空局的哨兵系列数据

Remote Sensing迷途小书童 1万+

云服务器自动断开连接的解决办法

1. 找到sshd_config配置文件 vi /etc/ssh/sshd_config 使用vi打开进行编辑,在文件中找到以下配置项: # ClientAliveInterval 0 # ClientAliveCountMax 3 去掉注释,改为: ClientAliveInterval 30 ClientAliveCountMax 86400 这两行的意思是: 1、服务端每隔多少秒向客户端发送一个心跳数据 2、客户端多少次没有相应,服务器自动断掉连接 2. 重启sshd服务

sinat_31089473的博客 3718

3D Slicer:从入门到精通(二)——入门指南

本篇文章包含开始使用3D Slicer所需的信息,包括如何安装和快速开始使用基本功能,以及在哪里找到更多信息。

walt3433的博客 2万+

手把手教你用DaVinci Configurator配置AUTOSAR SWC接口(含RTE避坑指南)

本文提供了一份基于DaVinci Configurator工具的AUTOSAR软件组件(SWC)接口配置实战指南。文章详细拆解了SR(发送者-接收者)和CS(客户端-服务器)接口的配置流程,并重点分享了运行时环境(RTE)生成阶段在多核部署、数据类型匹配等常见陷阱中的避坑方案与调试技巧,旨在帮助汽车电子工程师高效完成配置并规避错误。

uuu88的博客 547

实现一个简单的哈希表

函数使用线性探测法查找合适的位置插入一个元素或查找一个已有的元素。2. 创建哈希表函数。5. 打印哈希表函数。

ke_wu的博客 822

【测试】echo发送和接收TCP/UDP数据包|shell 发送TCP/UDP数据包

目录 通过/dev/tcp、/dev/udp shell给tcp或udp服务发送16进制报文指令 通过/dev/tcp、/dev/udp (https://blog.youkuaiyun.com/u010039418/article/details/86251470) 通过/dev/tcp、/dev/udp可以直接在shell脚本中发起tcp、udp连接,方便又高效,平时用于测试啥的还是挺方便的。 直接发送 格式 /dev/udp/ip/port 比如要向本地10001端口发送数据,可以使用 ec.

我的笔记本 1万+

数据结构 Hash表(哈希表)

哈希函数三套“算法宝典”算法刷题LeetCode中文版(为例)人与人存在很大的不同,我们都拥有各自的目标,在一线城市漂泊的我偶尔也会羡慕在老家踏踏实实开开心心养老的人,但是我深刻知道自己想要的是一年比一年有进步。最后,我想说的是,无论你现在什么年龄,位于什么城市,拥有什么背景或学历,跟你比较的人永远都是你自己,所以明年的你看看与今年的你是否有差距,不想做咸鱼的人,只能用尽全力去跳跃。祝愿,明年的你会更好!

2401_84618926的博客 1308

【Unity3D优化】优化内置shader的内存占用

在打AB包的过程中,并不会把这些Built-in的shader单独打包,并与材质球和预设体做好依赖,因此打AB包时,Unity会自行在材质球和预制体的AB包内每一个都包含进去用到的Built-in的Shader,而且运行时,由于加载的是不同的AB包,shader也是不同的实例,占用的也是多份内存。结合项目特点可以分析,由于项目里使用了大量的粒子特效,一些特殊的效果,会给特效师写定制的shader,但是这些常见的效果,特效师直接使用了Unity Built-in的shader。继续优化内存占用。

a310989583的专栏 2312

利用Android系统漏洞实现后台弹窗(外弹)

关键:从 Android 8.0(API 26)开始,禁止使用 context.sendBroadcast() 发送隐式广播(即没有指定 setPackage() 或明确组件的广播)。demo核心代码展示利用Android显示系统和广播系统的漏洞实现在后台弹窗的功能,支持最新Android15,16版本。核心功能都是在so层去做,大量使用了jni反调, 如果要上架到应用市场,需要对代码做进一步混淆,加固以应对市场安全扫描。3,开启虚拟显示窗口,这是个透明像素窗口。5,可开启一个线程,调用这个外弹窗口。

2018,再出发~ 1316

哈希表和制作一个简易的哈希表

哈希表和自定义简易哈希表

weixin_62261676的博客 403

安卓无障碍服务保活实战:如何用AccessibilityService实现后台常驻(附完整代码)

本文深入解析如何利用Android无障碍服务(AccessibilityService)实现后台服务保活,涵盖多版本系统适配、前台服务集成、开机自启机制等关键技术。通过详细的Kotlin代码示例和合规性指导,帮助开发者构建稳定可靠的后台服务解决方案,同时避免因滥用无障碍服务导致的应用下架风险。

milk5的博客 1073

哈希表

哈希函数设定 student类 、equals类 public class Student { int grade; int cls; String firstName; String lastName; Student(int grade,int cls,String firstName,String lastName){ this.grade=grade; this...

mengmengkuaipao的博客 104

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

8数码,静态数组+自建开散列哈希表;

<br />#include <stdio.h> #include <string.h> #include <stdlib.h> typedef int State[9]; const int MAXSTATE=1000000; //状态数不会超过这个,9!种 State st[MAXSTATE],goal; //状态数组, 目标状态 int dist[MAXSTATE]; // 已走步数 int fa[MAXSTATE]; // 前趋状态 /*移动方向*/ const int d

总是在想,如果我能坚持2年,会是怎样? 927

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LRU缓存的两种实现方式,双链表+哈希表;数组

双链表+哈希表 class LRU { public: LRU(size_t _capacity) : capacity(_capacity) {} ~LRU() {} void set(int key, int val) { auto it = cache.find(key); if (it != cache.end()) { dlist.erase(it->second); dlist.push

weixin_41054345的博客 278

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LeetCode-----第一题-----两数之和

1. 两数之和 难度:简单 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 题目解析: 虽然是简单,自己太菜,但不得不说被虐了。被虐了,还不得站起来不...

L_smartworld的博客 471

哈希表的介绍和内存布局 [数据结构][Java]

是根据关键码值(key - value)而直接进行访问的数据结构,也就是说: 他通过把关键码值映射到表中的一个位置来访问记录,以加快查找速度上面将关键码值映射到表中的一个位置的映射函数我们称之为: 散列函数存放记录(数据)的数组我们就称之为一个散列表(哈希表)

m0_57001006的博客 610

Java实现简易HashMap

创建节点类 节点类含有的属性:键值对(value,key)以及指向下一节点的next; 这些属性的get以及set方法 代码如下: /** * 节点类 * @author HP * */ public class Node { private Object value; private Object key; private Node next; /** * 空节点 *...

Juily家的小蜜果 2917

LeetCode-----第四十一题-----缺失的第一个正数

缺失的第一个正数 难度:困难 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。 示例1: 输入: [1,2,0] 输出: 3 示例2: 输入: [3,4,-1,1] 输出: 2 示例3: 输入: [7,8,9,11,12] 输出: 1 提示: 你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。 题目解析: 本题主要有一个要求,时间复杂度为O(n),并且只能使用常数级别的额外空间。那么显然就不能使用排序算法了。这里...

L_smartworld的博客 267

算法打卡01-两数之和

两数之和

weixin_47205405的博客 282

C语言解LeetCode 149:哈希表与最简分数高效统计共线点

在算法与数据结构的学习中,哈希表是一种极为重要的基础工具,它以键值对的形式实现高效查找与计数,广泛应用于各类工程场景。而在编程面试与刷题过程中,处理几何问题常常需要将抽象的数学关系转化为可计算的数值表示。例如,判断平面点是否共线时,直接使用浮点数斜率可能因精度误差导致结果错误,更稳健的思路是借助最简分数和符号归一化,将每个方向映射为唯一的整数对。本文以LeetCode 149题为例,深入讲解如何用C语言从零实现一个基于开放寻址的哈希表,并结合最大公约数约分、版本号复用等技巧,在O(n^2)时间复杂度内完成共

weixin_31292729的博客 244

leetcode 771. 宝石与石头(2020.10.2)

【题目】771. 宝石与石头 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。 J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。 示例 1: 输入: J = "aA", S = "aAAbbbb" 输出: 3 示例 2: 输入: J = "z...

Sophia_fez的博客 335

哈希的一些理解

2024/12/28/21:55的心得

2302_80440382的博客 348

牛客NC313 两个数组的交集 C++

用哈希表存储第一个数组,再和第二个数组对比,对比成功就添加到新的数组中,再将哈希表的该位置变为false,防止重复添加。这里数据范围仅有1000,所以我们可以自己创建一个bool数组来当哈希表,节省new的时间。

m0_63816268的博客 290

C++常用头文件

C++常用头文件 #include <cstdint> for C++, or #include <stdint.h> for C. 定义了一些整数类型别名,例如INT_MAX, INT_MIN,。 #include <climits> for C++, or #include <limits.h> for C. 该头文件定义了根据OS和编译器实现的基本整数类型限制的常量。 #include <unistd.h> unix类型操作系统api的封装,

赵大宝的博客 5468
上一篇: numpy数组按某列排序
下一篇: 用python列出当前文件夹下所有子文件路径(包括子文件夹内文件)
cloud____
博客等级 码龄6年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值