通过hashtable实现dic
# -*- encoding: utf-8 -*-
"""
@File : 123.py
@Time : 2021-10-07 18:11
@Author : XD
@Email : gudianpai@qq.com
@Software: PyCharm
"""
#实现ADT Map (字典)
class HashTable:def __init__(self):self.size = 11 # 可以任意设置,但为了便于求解,应该设为素数self.slots = [None] * self.sizeself.data = [None] * self.size# 定义散列函数def hashfunction(self, key):return key % self.size# 定义冲突解决方法,简单线性加一def rehash(self, oldhash):return (oldhash + 1) % self.sizedef put(self, key, data):hashvalue = self.hashfunction(key)# key不存在if self.slots[hashvalue] == None:self.slots[hashvalue] = keyself.data[hashvalue] = data# key已存在else:# 未发生冲突if self.slots[hashvalue] == key:self.data[hashvalue] = dataelse: # 发生散列冲突nextslot = self.rehash(hashvalue)while self.slots[nextslot] != None and self.slots[nextslot] != key:nextslot = self.rehash(nextslot)if self.slots[nextslot] == None:self.slots[nextslot] = keyself.data[nextslot] = dataelse:self.data[nextslot] = datadef get(self, key):startslot = self.hashfunction(key)pos = startslot# 空槽时则表示找不到keywhile self.slots[pos] != None:if self.slots[pos] == key: # 找到keyreturn self.data[pos]else:pos = self.rehash(pos) # 没找到key,找下一个if pos == startslot: # 回到起点表示没找到keyreturn Nonereturn None# 通过设置__getitem__和__setitem__就可以实现形如H[key]的取值和赋值def __getitem__(self, key):return self.get(key)def __setitem__(self, key, data):self.put(key, data)if __name__ == '__main__':H = HashTable()H[1] = 'cat'H[5] = 'piajun'print(H[1])print(H[5])print(H[2])
通过hashtable实现dic相关推荐
- .Net 中HashTable,HashMap 和 Dictionarykey,value 和ListT和DataTable的比较
转载自http://www.cnblogs.com/jilodream/p/4219840.html (一)HashTable 和Dic 数据结构 Hashtable和Dictionary ...
- HashTable,Dictionary,ConcurrentDictionary 的应用场景,区别,用法统计
https://www.cnblogs.com/yinrq/p/5584885.html 一.HashTable HashTable表示键/值对的集合.在.NET Framework中,Hashtab ...
- hashTabel List 和 dic
hashTabel List 和 dic 原:https://www.cnblogs.com/jilodream/p/4219840.html .Net 中HashTable,HashMap 和 ...
- ArrayList、HashTable、List、Dictionary的演化及如何选择使用
在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求. 由于这种限制不方便,所以出现了ArrayList. ArrayList.List<T> ArrayList是可变长数组,你 ...
- C# Hashtable和Dictionary区别
Hashtable和Dictionary都是.Net下的表示键值对的集合,那么我们在使用中该选择Hashtable还是Dictionary?下边我们看看他们之间的区别: 1.Dictionary< ...
- c#中Dictionary、ArrayList、Hashtable和数组 Array 的区别(转)
C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue 1.数组是固定大小的,不能伸缩.虽然System.Array.Resize这个 ...
- Hashtable Dictionary的使用
要了解C#中Hashtable Dictionary的使用,我们先来看一个例子! using System; using System.Collections; namespace NoSortHas ...
- Unity-ArrayList,List,HashTable,Dictionary
//1 List比数组的优势在哪. //数组的长度不能扩容,是固定的. //2 List比Arraylist的优势在哪. //Arraylist执行效率低(有装箱和拆箱过程),不如List执行效率高. ...
- Lession11 集合和泛型(ArrayList方法、Arraylist类、ArrayList添加对象、ArrayList长度、HashTable类、Hashtable类练习-----)
目录 ArrayList方法: ArrayList添加对象: Arraylist类: ArrayList长度: HashTable类: Hashtable类练习: IComparable泛型接口排序: ...
最新文章
- webpack 配置react脚手架(四):路由配置
- idea 配置多个jdk
- [MetalKit]34-Working-with-memory-in-Metal内存管理
- springboot启动后进页面出现错误(java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required)
- Redis学习第三课:Redis Hash类型及操作
- docker开启mysql的binlog日志
- 数据操作语言DML及数据定义语言DDL的区别
- android图灵机器人教程,简单的调用图灵机器人
- SQL 递归查询最顶级目录
- 奥巴马吐槽川普“笨蛋”的视频火了,这又得“归功”于AI
- zabbix-自定义键值监控网卡IN、OUT流量
- php model controller,Laravel 中 Controller访问Model函数/常量
- 蒜头君任务系统C语言,白菜君的三角形 T3180 计蒜客
- e: 无法定位软件包 python-pip_关于Sony镜头不同系列定位的最全面分析
- 黑客之门:深入浅出windows的dll文件[图]
- 微信降级adb备份android7.0,微信自动帮你更新7.0了?简单两步轻松降级
- WS小世界网络模型构造算法
- 批处理命令--call和start
- github加速插件(google浏览器)
- Vue+el-tree,元素拖拽时出现禁用图标, 请看解决办法
热门文章
- hypermesh安装包百度云_新闻突然!全新百度网盘发布
- drop 很慢 物化视图_物化视图问题-效率捉摸不定
- 2017.9.8 无归岛 思考记录
- 【英语学习】【Daily English】U03 Leisure Time L04 I need to squeeze in some time for reading
- Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (16) - L1数据缓存/存储转发访存消歧存储体冲突
- Pentium 4处理器架构/微架构/流水线 (5) - 流水线前端/乱序执行核/退役单元
- linux下使用c进行线程操作
- python paas_到底什么是PaaS?——【PaaS概述科普文】
- mysql 快速初始化_MySQL中的批量初始化数据的对比测试(r12笔记第71天)
- docker学习总结二