当前位置: 首页 > news >正文

数据结构(链表 哈希表)

在Python中,链表和哈希表都是常见的数据结构,可以用来存储和处理数据。

链表是一种线性数据结构,由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表可以用来实现栈、队列以及其他数据结构。Python中可以使用自定义类来实现链表,也可以使用内置的数据结构如listcollections.deque

哈希表(散列表)是一种根据关键字直接访问内存中存储位置的数据结构,通过哈希函数将关键字映射到内存地址。Python中的哈希表实现主要是通过字典(dict)数据类型实现的。

目录

链表

介绍

链表的创建和遍历

链表的插入和删除

双链表

哈希表

哈希表

哈希表的实现

哈希表的应用


链表

介绍

线性结构

class Node:def __init__(self,item):self.item = itemself.next = None
​
​
a = Node(1)
b = Node(2)
c = Node(3)
a.next = b
b.next = c
print(a.next.next.item)

链表的创建和遍历

头插法 尾差法

class Node:def __init__(self,item):self.item = itemself.next = None
​
​
def create_linklist_head(li):head = Node(li[0])for element in li[1:]:node = Node(element)node.next = headhead = nodereturn head
​
def create_linklist_tail(li):head = Node(li[0])tail = headfor element in li[1:]:node = Node(element)tail.next = nodetail = nodereturn head
def print_lk(lk):while lk:print(lk.item,end=',')lk = lk.next
​
lk = create_linklist_tail([1,2,3,5,8])
print_lk(lk)

链表的插入和删除

双链表

哈希表

哈希表

# python中的字典 集合(key 不能重复)都是使用的这种数据结构来存储的
# 一个通过哈希函数来计算数据存储位置的数据结构
​
'''
insert(key,value):插入键值对
​
get(key):如果存在键为key的键值对,则返回其value值,否则返回空值
​
delete(key):删除键为key的键值对
'''
# 直接寻址表+哈希函数 = 哈希表      浪费空间
# 哈希冲突# 开放寻址法:
'''
​
线性探查:位置被占用,寻找i+1,......
查找规则:22%7=1,1位置被占用,继续向后查找
​
二次探查:探查i+1^2,i-1^2,...
​
二度哈希:有n个哈希函数,当使用第一个哈希函数h1发生冲突时,尝试使用h2,h3??????
'''
# 拉链法 常用
# 哈希表每个位置都连接一个链表,当冲突发生时,冲突的元素将被加到该位置链表的最后
# 常见哈希函数
'''
除法哈希法:h(k) = k%m乘法哈希法       ??????
​
h(k) = floor(m(A*key%1))        向下取整
​
全域哈希.....
​
'''

哈希表的实现

# 哈希表的实现
​
class LinkList:class Node:def __init__(self,item=None):self.item = itemself.next = None
​# 迭代器class LinkListIterator:def __init__(self,node):self.node = nodedef __next__(self):if self.node:cur_node = self.nodeself.node = cur_node.nextreturn cur_node.itemelse:raise StopIterationdef __iter__(self):return self
​def __init__(self,iterable=None):self.head = Noneself.tail = Noneif iterable:self.extend(iterable)
​def append(self,obj):s = LinkList.Node(obj)if not self.head:self.head = sself.tail = selse:self.tail.next = sself.tail = s
​def extend(self,iterable):for obj in iterable:self.append(obj)
​def find(self,obj):for n in self:if n == obj:return Trueelse:return False# 迭代器def __iter__(self):return self.LinkListIterator(self.head)#转换成字符串def __repr__(self):return "<<"+",".join(map(str,self))+">>"
​
# 类似于集合的结构
class HashTable:def __init__(self,size = 101):self.size = sizeself.T = [LinkList() for i in range(self.size)]
​def h(self,k):return k % self.size
​def insert(self,k):i = self.h(k)if self.find(k):print("Duplicated Insert.")else:self.T[i].append(k)
​def find(self,k):i = self.h(k)return self.T[i].find(k)
​
​
ht = HashTable()
​
ht.insert(0)
ht.insert(1)
ht.insert(3)
ht.insert(102)
ht.insert(508)
# print(",".join(map(str,ht.T)))
​
print(ht.find(3))

哈希表的应用

加密,不能解密

哈希冲突(不同的值使用哈希函数计算出来的哈希值可能相同)

http://www.lryc.cn/news/522925.html

相关文章:

  • 人工智能之深度学习_[4]-神经网络入门
  • STM32之CubeMX图形化工具开发介绍(十七)
  • css3过渡总结
  • latin1_swedish_ci(latin1 不支持存储中文、日文、韩文等多字节字符)
  • C语言编程笔记:文件处理的艺术
  • [创业之路-255]:《华为数字化转型之道》-1-主要章节、核心内容、核心思想
  • 《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 2024 京东零售技术年度总结
  • PyTorch使用教程(8)-一文了解torchvision
  • 如何在不暴露MinIO地址的情况下,用Spring Boot与KKFileView实现文件预览
  • ICMP协议和ICMP重定向攻击
  • leetcode203-移除链表元素
  • Rust 中构建 RESTful API
  • Sqlmap入门
  • 迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?
  • 移动端 REM 适配
  • 逐笔成交逐笔委托Level2高频数据下载和分析:20241230
  • C#实现字符串反转的4种方法
  • UDP 单播、多播、广播:原理、实践
  • 深入浅出:Go语言中的bytes包与字节串操作详解
  • 数据库存储上下标符号,sqlserver 2008r2,dm8
  • LabVIEW串口通信调试与数据接收问题
  • oneplus3t-lineage-14编译-android7
  • 存储过程(SQL)
  • 【I/O编程】UNIX文件基础
  • 完美解决phpstudy安装后mysql无法启动
  • 自己造轮子-基于Ceres的GNSS-INS松耦合组合导航算法
  • 「实战应用」如何为DHTMLX JavaScript 甘特图添加进度线
  • MySQL面试题2025 每日20道
  • HTML学习笔记(4)