python链表和树实验报告_关于Python实现树结构和链表结构的一点想法
关于Python实现树结构和链表结构的一点想法
Python由于内置的数据结构具有很高的灵活性,所以可以用很多种方式来构建树、图、链表等结构
1. 树的Python实现
python自然可以使用class来创建Node结点类和Trie类,然后通过left和right属性保存Node结点来实现树
Python也可以使用字典来嵌套生成树,字典的Key作为当前结点,字典的Value为子树。
但需要注意的是,字典的value是一个字典,那么这个value字典中可以有多个Key,那么每个Key之间是互相为兄弟关系的。
同理,如列表等数据结构,也可以通过嵌套来生成树
在使用字典创建树时,可以重复利用dict的方法setdefault(key,default),如果key存在,则返回value,若不存在,则插入key:default并返回default
--------------------------
比较有意思的是对于树而言,在哪里存他的数据会有很多的不同,对于不同场景酌情实现
假设是使用class实现的字母前缀树,那么可以把字母值保存在当前Node结点的value中,那么这样匹配一个单词的时候,需要遍历所有的子节点找到对应值是否存在,这样在某一层上就多花了k的时间(由于字典自带哈希,所以字典实现的前缀树查找会很快,是O(1)的时间)
也可以把字母值保存在连向子结点的连线上
由于字母前缀树每个结点最多只有26种取值,所以可以提前存一个初始化为26个None的列表,如果在b的位置有值,那么在第二个位置存子结点的Node,这样就实现了把字母值存在连向子结点的连线上。
同时,匹配一个单词的时候,直接来判断这个位置是None还是存在Node结点就可以直接找到下一个结点了,也是O(1)的时间,但是如果树很深,但是很窄的话,这样会浪费许多空间
所以针对不同的场景需求,可以自行选择存储数据的位置,有不同的效果。
利用字典实现树代码如下
#利用字典实现前缀树
trie = {}
# 建立字典实现的字母前缀树
for word in words:
cur = trie
for alpha in word:
cur=cur.setdefault(alpha,{})
2. 链表的Python实现
python本身的列表已经很好用了,在python的标准库中没有链接列表的实现,如果需要大量插入和删除还是需要手动实现一下的,可以实现O(k)的增删查找复杂度
链表实现自然也可以用class来创建Node结点类和Trie类,在Trie类中创建head与tail的Node对象,就可以进行追踪了
如果需要O(1)的查找以及增删复杂度的链表,那么需要配合哈希与双向链表实现、那么在Trie类中还需要添加一个dict哈希来进行节点位置的追踪,key为Node节点的Key(Node节点属性有Key、value、next、pre),Value为该Node节点
#配合哈希与双向链表实现O(1)的查找以及增删复杂度
class Node:
def __init__(self,key,value):
self.key=key
self.value=value
self.next=None
self.pre=None
class LRUCache:
def __init__(self, capacity: int):
self.dic=dict()
self.capacity=capacity
self.size=0
self.head=Node(-1,-1)
self.tail=Node(-1,-1)
self.head.next=self.tail
self.tail.pre=self.head
def get(self, key: int) -> int:
if(key in self.dic):
new_node = Node(key, self.dic[key].value)
# 删除旧节点
del_node = self.dic[key]
del_node.pre.next = del_node.next
del_node.next.pre = del_node.pre
# 添加新节点到头部
new_node.pre = self.head
new_node.next = self.head.next
self.head.next.pre = new_node
self.head.next = new_node
self.dic[key]=new_node
return self.dic[key].value
else:
return -1
def put(self, key: int, value: int) -> None:
new_node = Node(key, value)
# 添加新节点到头部
new_node.pre = self.head
new_node.next = self.head.next
self.head.next.pre = new_node
self.head.next = new_node
if(key in self.dic):
del_node=self.dic[key]
del_node.pre.next=del_node.next
del_node.next.pre=del_node.pre
else:
# 如果key不在链表中,才考虑删去尾元素或者更改size
if(self.size==self.capacity):
# 如果满了,要删去尾部节点
self.dic.pop(self.tail.pre.key)
self.tail.pre.pre.next=self.tail
self.tail.pre=self.tail.pre.pre
else:
self.size+=1
self.dic[key] = new_node
原文:https://www.cnblogs.com/heyjjjjj/p/13837283.html
python链表和树实验报告_关于Python实现树结构和链表结构的一点想法相关推荐
- python链表和树实验报告_数据结构树和森林实验报告
_ 树和森林应用实验 实验报告 实验目的 ( 1) 掌握树和森林的二叉链表表示方法. (2) 掌握树和二叉树的结构及算法之间的对应关系. (3) 掌握树的两种遍历算法及其应用. 实验运行环境 Visu ...
- python学生成绩管理系统实验报告_【python 学生信息管理系统】
1. 简述 本文讲述的是用 python 语言写一个简单的学生信息管理系统,系统包含学生信息的增删查改功.同时使用了 mysql5.7.14 来存储数据. 2.准备工作 首先,先搭建好自己的 MySQ ...
- python爬虫豆瓣评论实验报告_用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)...
原创技术公众号:bigsai 前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块.工具知识的使用.然而我所在的组刚好遇到的是python爬虫的小课题. 心想这不是很简单嘛,搞啥 ...
- python数据分析实验报告_用Python处理实验数据
开篇语 近来忙于考试以及应付专业课,基本很少写简书了.昨晚攻坚了三个学生工作的任务(妈妈的吻.好久没有这么疯狂工作了.还是很爽的哦!) 只恨这张图没有标记时间,其实已经是十二点四十多了 今天难得清静, ...
- c语言的链表实验总结,链表实现集合实验报告_相关文章专题_写写帮文库
时间:2019-05-15 10:09:12 作者:admin <数据结构>实验报告二 分校:学号:日期:班级: 姓名: 程序名: L2311.CPP 一.上机实验的问题和要求: 单链表的 ...
- python名片管理器实验报告_名片管理系统——实验报告.doc
名片管理系统--实验报告 网上名片管理系统 数据库和表的建立:(在MySQL中创建数据库test,并在test数据库中建立card.user和recycle表格,其中card和recycle具有相同的 ...
- python贪吃蛇的实验报告_贪吃蛇游戏课程设计实验报告
DOC 可编辑修改 -------- 为你整理各种最新最全办公范文 -------- 双击可以删除 爱心 --- 用心 --- 恒心 贪吃蛇游戏课程设计实验报告 辽 宁 科 技 大 学 课程设计说明书 ...
- python数据分析实验报告_使用 Python 3 进行气象数据分析
项目简介 :本实验将对意大利北部沿海地区的气象数据进行分析与可视化.我们在实验过程中先会运用 Python 中 matplotlib 库的对数据进行图表化处理,最终在图表分析的支持下得出我们的结论. ...
- python学生管理系统设计实验报告_学生成绩管理系统实验报告(新鲜出炉)
C语言课程设计报告 源码下载方式 关注微信公众号 跨时代的jay 回复 学生成绩管理系统 为大家提供一些帮助! 获取链接后复制到浏览器即可下载 课题题目: 学生信息管理系统 班 级: 信卓11801 ...
最新文章
- Android 计算器
- 宣布EAXY:使Java中的XML更容易
- [渝粤教育] 四川信息职业技术学院 高频电子技术 参考 资料
- .ai域名注册已经极具投资价值进入火爆期
- 国二C语言大题评分,计算机二级C语言题型和评分标准
- 0基础学嵌入式:嵌入式linux视频教程免费分享!
- power BI电商案例分析
- Ubuntu修改/home下各目录为英文
- 软件测试面试中90%会遇到的问题:“你会搭建测试环境吗?”
- PyTorch 体验感悟
- 想不想修真鸿蒙秘术,想不想修真鸿蒙秘诀怎么得 揭开想不想修真秘诀真面目...
- windows和linux系统下数据传输工具——tftpd32使用说明
- 2022CCPC预选赛C Guess(博弈)
- 代码管理 阿里云 云效 设置云效 SSH 公钥 下载代码到本地配置SSH
- 12 道腾讯前端面试真题及答案整理
- MyBatis-Plus DQL与其他知识点
- ITK-图像主轴分析
- 【论文分享】★★★「SOTA」小样本图神经网络分类模型 HGNN:Hybrid Graph Neural Networks for Few-Shot Learning
- 无人驾驶—激光雷达与相机
- Every Tom,Dick and Harry. 不管张三李四。