# -*- 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相关推荐

  1. .Net 中HashTable,HashMap 和 Dictionarykey,value 和ListT和DataTable的比较

    转载自http://www.cnblogs.com/jilodream/p/4219840.html (一)HashTable    和Dic    数据结构 Hashtable和Dictionary ...

  2. HashTable,Dictionary,ConcurrentDictionary 的应用场景,区别,用法统计

    https://www.cnblogs.com/yinrq/p/5584885.html 一.HashTable HashTable表示键/值对的集合.在.NET Framework中,Hashtab ...

  3. hashTabel List 和 dic

    hashTabel  List  和 dic 原:https://www.cnblogs.com/jilodream/p/4219840.html .Net 中HashTable,HashMap 和 ...

  4. ArrayList、HashTable、List、Dictionary的演化及如何选择使用

    在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求. 由于这种限制不方便,所以出现了ArrayList. ArrayList.List<T> ArrayList是可变长数组,你 ...

  5. C# Hashtable和Dictionary区别

    Hashtable和Dictionary都是.Net下的表示键值对的集合,那么我们在使用中该选择Hashtable还是Dictionary?下边我们看看他们之间的区别: 1.Dictionary< ...

  6. c#中Dictionary、ArrayList、Hashtable和数组 Array 的区别(转)

    C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue 1.数组是固定大小的,不能伸缩.虽然System.Array.Resize这个 ...

  7. Hashtable Dictionary的使用

    要了解C#中Hashtable Dictionary的使用,我们先来看一个例子! using System; using System.Collections; namespace NoSortHas ...

  8. Unity-ArrayList,List,HashTable,Dictionary

    //1 List比数组的优势在哪. //数组的长度不能扩容,是固定的. //2 List比Arraylist的优势在哪. //Arraylist执行效率低(有装箱和拆箱过程),不如List执行效率高. ...

  9. Lession11 集合和泛型(ArrayList方法、Arraylist类、ArrayList添加对象、ArrayList长度、HashTable类、Hashtable类练习-----)

    目录 ArrayList方法: ArrayList添加对象: Arraylist类: ArrayList长度: HashTable类: Hashtable类练习: IComparable泛型接口排序: ...

最新文章

  1. webpack 配置react脚手架(四):路由配置
  2. idea 配置多个jdk
  3. [MetalKit]34-Working-with-memory-in-Metal内存管理
  4. springboot启动后进页面出现错误(java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required)
  5. Redis学习第三课:Redis Hash类型及操作
  6. docker开启mysql的binlog日志
  7. 数据操作语言DML及数据定义语言DDL的区别
  8. android图灵机器人教程,简单的调用图灵机器人
  9. SQL 递归查询最顶级目录
  10. 奥巴马吐槽川普“笨蛋”的视频火了,这又得“归功”于AI
  11. zabbix-自定义键值监控网卡IN、OUT流量
  12. php model controller,Laravel 中 Controller访问Model函数/常量
  13. 蒜头君任务系统C语言,白菜君的三角形 T3180 计蒜客
  14. e: 无法定位软件包 python-pip_关于Sony镜头不同系列定位的最全面分析
  15. 黑客之门:深入浅出windows的dll文件[图]
  16. 微信降级adb备份android7.0,微信自动帮你更新7.0了?简单两步轻松降级
  17. WS小世界网络模型构造算法
  18. 批处理命令--call和start
  19. github加速插件(google浏览器)
  20. Vue+el-tree,元素拖拽时出现禁用图标, 请看解决办法

热门文章

  1. hypermesh安装包百度云_新闻突然!全新百度网盘发布
  2. drop 很慢 物化视图_物化视图问题-效率捉摸不定
  3. 2017.9.8 无归岛 思考记录
  4. 【英语学习】【Daily English】U03 Leisure Time L04 I need to squeeze in some time for reading
  5. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (16) - L1数据缓存/存储转发访存消歧存储体冲突
  6. Pentium 4处理器架构/微架构/流水线 (5) - 流水线前端/乱序执行核/退役单元
  7. linux下使用c进行线程操作
  8. python paas_到底什么是PaaS?——【PaaS概述科普文】
  9. mysql 快速初始化_MySQL中的批量初始化数据的对比测试(r12笔记第71天)
  10. docker学习总结二