Python(数据结构2)
常见数据结构
队列
队列(Queue),它是一种运算受限的线性表,先进先出(FIFO First In First Out)
Python标准库中的queue模块提供了多种队列实现,包括普通队列、双端队列、优先队列等。
1 普通队列
queue.Queue 是 Python 标准库 queue 模块中的一个类,适用于多线程环境。它实现了线程安全的 FIFO(先进先出)队列。
Queue:普通队列,从队尾入列,从列头出列
put():入列
get():出列
2 双端队列
deque是一个双端队列的实现,它提供了在两端快速添加和移除元素的能力。
deque:双端队列,既可以在队尾进行入队和出队操作,也可以在对头进行出队和入队
append:从队尾入队
appendleft:在队头入队
pop:从队尾出队
popleft:从队头出队
appendleft和popleft组合使用时,相当于栈操作
3 优先队列
queue.PriorityQueue
queue.PriorityQueue 是 Python 标准库 queue 模块中的一个类,适用于多线程环境。它实现了线程安全的优先队列。
向队列中添加元素,元素是一个元组 (priority, item),其中 priority 是优先级,item 是实际的数据,prioriity越小优先级越高。
heapq
heapq 模块是 Python 标准库中的一个模块,提供了基于堆的优先队列实现。
heapq 模块不是线程安全的,适用于单线程环境。
heapq.heappush(heap,):向堆中添加元素,元素是一个元组 (priority, item)
heapq.heappop(heap):从堆中取出元素
树
二叉树
1 概念
-
二叉树可以为空, 也就是没有结点.
-
若不为空,则它是由根结点和称为其左子树TL和右子树TR的两个不相交的二叉树组成。
2 特性
二叉树有几个比较重要的特性, 在笔试题中比较常见:
-
一个二叉树第 i 层的最大结点数为:2^(i-1), i >= 1;
-
深度为k的二叉树有最大结点总数为: 2^k - 1, k >= 1;
-
对任何非空二叉树 T,若n0表示叶结点的个数、n2是度为2的非叶结点个数,那么两者满足关系n0 = n2 + 1。
3 特殊的二叉树
满二叉树(Full Binary Tree)
-
在二叉树中, 除了最下一层的叶结点外, 每层节点都有2个子结点, 就构成了满二叉树.
完全二叉树(Complete Binary Tree)
-
除二叉树最后一层外, 其他各层的节点数都达到最大个数.
-
且最后一层从左向右的叶结点连续存在, 只缺右侧若干节点.
-
满二叉树是特殊的完全二叉树.
4 二叉树的存储
二叉树的存储常见的方式是链表.
链表存储:
-
二叉树最常见的方式还是使用链表存储.
-
每个结点封装成一个Node, Node中包含存储的数据, 左结点的引用, 右结点的引用.
5 二叉树遍历
前序遍历(Pre-order Traversal)、中序遍历(In-order Traversal)和后序遍历(Post-order Traversal)是二叉树的三种基本遍历方式。
遍历规则:
前序遍历,按照以下顺序访问节点:根节点、左子树、右子树。
中序遍历,按照以下顺序访问节点:左子树、根节点、右子树。
后序遍历,按照以下顺序访问节点:左子树、右子树、根节点。
二叉查找树
二叉查找树(Binary Search Tree, BST)是一种特殊的二叉树,它具有以下性质:
-
每个节点都有一个键值(key)。
-
对于每个节点,其左子树中的所有节点的键值都小于该节点的键值。
-
对于每个节点,其右子树中的所有节点的键值都大于该节点的键值。
-
左子树和右子树也分别是二叉查找树。
-
二叉查找树不允许出现键值相等的结点。
代码实现:
1.创建二叉查找树节点;2.创建二叉查找树类;3 插入节点;4 查找节点;5.删除节点;6 中序遍历。
TreeNode
类定义了一个节点,它有三个属性:
-
key
:存储节点的值。 -
left
:指向节点的左子节点,默认为None
。 -
right
:指向节点的右子节点,默认为None
。
BST
类定义了一个二叉搜索树,它有一个属性:
-
root
:指向树的根节点,默认为None
。
insert
方法用于插入一个新的节点到树中。如果树为空(即根节点 None
),则创建一个新的节点作为根。如果树非空,则调用 _insert
方法来递归地插入节点。_insert
方法检查插入的键值与当前节点的键值,并相应地向左子树或右子树进行插入。
inorder_search
方法执行中序遍历,返回树中的所有键值。它首先初始化一个空的结果列表,然后调用 _inorder_search
辅助方法填充这个列表。_inorder_search
方法按照左子树 -> 当前节点 -> 右子树的顺序遍历整个树,并将每个节点的键值追加到结果列表中。
remove
方法用于从树中移除具有特定键值的节点。它通过调用 _remove
辅助方法来实现。_remove
方法是一个递归方法,它处理四种情况:
-
如果树为空,返回
None
。 -
如果键值小于当前节点的键值,则递归地移除左子树中的节点。
-
如果键值大于当前节点的键值,则递归地移除右子树中的节点。
-
如果键值等于当前节点的键值,那么根据当前节点的情况来处理:
-
如果当前节点没有子节点,则返回
None
。 -
如果当前节点只有一个子节点,则返回那个子节点。
-
如果当前节点有两个子节点,则找到右子树中的最小值节点来替代当前节点,并递归地删除这个最小值节点。
-
_min_value_node
方法用于找到并返回从给定节点开始的子树中的最小值节点。它通过不断访问当前节点的左子节点直到到达最左边的叶子节点来实现。
Python包和模块
当使用Python编程时,包(Packages)和模块(Modules)是两个关键的概念,它们有助于组织、管理和复用代码。
模块(Modules)
一个.py 文件就是一个模块
-
把相关功能的函数等放在一起有利于管理,有利于多人合作开发
-
模块的分类
-
内置模块(在python3 程序内部,可以直接使用)
-
标准库模块(在python3 安装完后就可以使用的 )
-
第三方模块(需要下载安装后才能使用)
-
自定义模块(用户自己编写)
-
模块名如果要给别的程序导入,则模块名必须是 标识符
-
导入模块
import 模块名 [as 模块新名字1]
from 模块名 import 模块属性名 [as 属性新名]
from 模块名 import *
模块的内部属性
__file__ 绑定模块的路径
__name__ 绑定模块的名称
如果是主模块(首先启动的模块)则绑定 '__main__'
如果不是主模块则 绑定 xxx.py 中的 xxx 这个模块名
这样输入函数名可调用函数。
Python 常用的内建模块
1 random 模块
random.choice(seq):从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
random.randrange (start, stop,step):从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
输出一个范围在0到10的一个随机的偶数
random.random():随机生成下一个实数,它在[0,1)范围内。
如图,random函数还可与其他函数组合使用,该图表示,在0到1间生成1个数,然后乘10,且保留两位小数,最后加上5.
random.shuffle(list):将序列的所有元素随机排序,修改原list
uniform(x, y):随机生成实数,它在[x,y]范围内.
random.randint(a,b):生产 a~b的随机整数
os 模块
os
模块是Python标准库中的一部分,提供了一种与操作系统进行交互的方法。主要功能包括文件和目录的操作、路径处理、进程管理等。在使用os
模块之前,我们需要先导入它:
os.getcwd():获取当前工作目录
os.chdir(path): 改变当前工作目录
os.listdir(path='.'): 返回指定目录下的所有文件和目录列表
os.mkdir(path): 创建目录
os.remove(path): 删除目录
os.path 模块
os.path.split(path):将文件路径和文件名切割,得到文件路径和文件名
os.path.exists(path):判断目录或者文件是否存在
os.path.isdir():判断指定路径是否是目录
os.path.isfile():判断指定路径是否是文件
相关文章:
Python(数据结构2)
常见数据结构 队列 队列(Queue),它是一种运算受限的线性表,先进先出(FIFO First In First Out) Python标准库中的queue模块提供了多种队列实现,包括普通队列、双端队列、优先队列等。 1 普通队列 queue.Queue 是 Python 标准库 queue 模块中的一个类…...
深入解析HTTP与HTTPS的区别及实现原理
文章目录 引言HTTP协议基础HTTP响应 HTTPS协议SSL/TLS协议 总结参考资料 引言 HTTP(HyperText Transfer Protocol)超文本传输协议是用于从Web服务器传输超文本到本地浏览器的主要协议。随着网络安全意识的提高,HTTPS(HTTP Secure…...
Java IO 模型
I/O 何为 I/O? I/O(Input/Output) 即输入/输出 。 我们先从计算机结构的角度来解读一下 I/O。 根据冯.诺依曼结构,计算机结构分为 5 大部分:运算器、控制器、存储器、输入设备、输出设备。 输入设备(比…...
安装双系统后ubuntu无法联网(没有wifi标识)网卡驱动为RTL8852BE
安装双系统后ubuntu没有办法联网,(本篇博客适用的版本为ubuntu20.04)且针对情况为无线网卡驱动未安装的情况 此时没有网络,可以使用手机数据线连接,使用USB共享网络便可解决无法下载的问题。 打开终端使用命令lshw -C …...
Sqoop的安装配置及使用
Sqoop安装前需要检查之前是否安装了Tez,否则会产生版本或依赖冲突,我们需要移除tez-site.xml,并将hadoop中的mapred-site.xml配置文件中的mapreduce驱动改回成yarn,然后分发到其他节点,hive里面配置的tez也要移除,然后…...
R语言机器学习算法实战系列(十三)随机森林生存分析构建预后模型 (Random Survival Forest)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程加载R包案例数据数据预处理数据描述构建randomForestSRC模型评估模型C-indexBrier score特征重要性构建新的随机森林生存模型风险打分高低风险分组的生存分析时间依赖的ROC(Ti…...
三款计算服务器配置→如何选择科学计算服务器?
科学计算在众多领域都扮演着关键角色,无论是基础科学研究还是实际工程应用,强大的计算能力都是不可或缺的。而选择一台合适的科学计算服务器,对于确保科研和工作的顺利进行至关重要。 首先,明确自身需求是重中之重。要仔细考虑计算…...
Oracle 19c RAC删除多余的PDB的方式
文章目录 一、删除PDB并删除数据文件二、删除PDB并保留数据文件三、插拔PDB 一、删除PDB并删除数据文件 所删除的pdb必须是mount的状态才可以删除: #1、关闭pdb alter pluggable database pdb_name close immediate instancesall; #2、删除pdb以及数据文件 drop p…...
什么是云渲染?云渲染有什么用?一篇看懂云渲染意思
你知道云渲染是怎么回事吗? 其实就是把3D模型变成2D图像的过程,只不过这个过程是在云端完成的。我们在本地啥都不用做,只需要等结果就行。 现在云渲染主要有两种类型:一种是物理机房云渲染,另一种是服务器机房云渲染。…...
MATLAB中 exist函数用法
目录 语法 说明 示例 检查工作区变量是否存在 检查文件夹是否存在 检查 MATLAB 函数是否为内置函数 exist函数的功能是检查变量、脚本、函数、文件夹或类的存在情况。 语法 exist name exist name searchType A exist(___) 说明 exist name 以数字形式返回 name 的类…...
在银河麒麟系统中Qt连接达梦数据库
解决在银河麒麟系统中使用Qt连接达梦数据库提示:project Error library odbc is not defined问题 一、编译ODBC 下载解压unixODBC(http://www.unixodbc.org/unixODBC-2.3.1.tar.gz) 打开终端,切换到unixODBC-2.3.1目录下&#x…...
nodejs 服务器实现负载均衡
server.js const express require(express); const { createProxyMiddleware } require(http-proxy-middleware); const axios require(axios);const app express();// 定义后端服务列表 const services [{ target: http://localhost:3001 },{ target: http://localhost:…...
今日总结10.29
常见序列化协议有哪些 序列化(serialization)是将对象序列化为二进制形式(字节数组),一般也将序列化称为编码(Encode),主要用于网络传输、数据持久化等。常见的序列化协议包括以下几…...
使用 FastGPT 工作流实现 AI 赛博算卦,一键生成卦象图
最近那个男人写的汉语新解火遍了全网,那个男人叫李继刚,国内玩 AI 的同学如果不知道这个名字,可以去面壁思过了。 这个汉语新解的神奇之处就在于它只是一段几百字的提示词,效果却顶得上几千行代码写出来的应用程序。 这段提示词…...
vue3+ts实时播放视频,视频分屏
使用vue3以及播放视频组件Jessibuca Jessibuca地址 使用循环个数来实现分屏 效果图,四屏 九屏 dom代码 <div class"icon"><div class"icon-box"><span class"text">分屏:</span><el-icon …...
【网页设计】学成在线案例
Demo 典型的企业级网站,目的是为了整体感知企业级网站的布局流程,复习以前知识。 集合代码见文章最后。 5.1 准备素材和工具 学成在线 PSD 源文件。开发工具 PS(切图) sublime(代码) chrome࿰…...
一篇文章总结 SQL 基础知识点
1. 官方文档 MySQL:https://dev.mysql.com/doc/refman/8.4/en/ SQL Server:What is SQL Server? - SQL Server | Microsoft Learn Oracle:https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/loe.html 2. 术语 SQL S…...
vue Element U 解决表格数据不更新问题
最近在使用 Vue 和 Element UI 开发后台管理系统时,操作表单数据重新请求表格接口后遇到表格数据不更新的问题。后面查阅了些资料,这通常是由于 Vue 的响应式系统没有检测到数据的变化,或者数据更新后没有正确地触发视图的重新渲染。以下是一…...
PeView 命令行PE文件解析工具
PeView 是一款基于C/C开发的命令行版PE文件解析工具,专门用于解析Windows可执行文件并提供详尽的文件结构和交互式查询功能,帮助用户理解和分析目标程序的内部构成,是逆向分析和软件调试中的重要工具,本次分享工具源代码及使用方法…...
微信小程序25__实现卡片变换
先看效果图 实现代码如下: <view class"page" style"filter:hue-rotate({{rotation}}deg)"><view class"prev" catchtap"toPrev">《《《</view><view class"next" catchtap"toNext&q…...
使用Git进行团队协作开发
使用Git进行团队协作开发 Git简介 安装Git 在Windows上安装Git 在macOS上安装Git 在Linux上安装Git 设置Git用户信息 创建Git仓库 基本Git命令 添加文件 提交更改 查看状态 克隆仓库 推送更改 获取更改 分支管理 创建分支 切换分支 合并分支 删除分支 解决合并冲突 检查冲突…...
期货跟单、量化交易模拟演示系统
一、跟单下单 在“排行榜”中选择要跟单的用户,合约可以跟全部,也可以指定跟该用户的某一合约操作,选定跟单的倍数(操作手数的倍数)/手数(指定手数,可以不是对方的倍数),…...
Python小白学习教程从入门到入坑------第十八课 异常模块与包【下】(语法基础)
一、内置全局变量__name__ 在Python中,有一些内置的全局变量和特殊变量,它们是由Python解释器预定义的,可以在代码的任何地方直接使用。 这些变量通常用于提供关于当前解释器状态的信息,或者用于控制解释器的行为 在Python中&a…...
arcgis pro 3.3.1安装教程
一、获取方式: http://dt4.8tupian.net/2/29913a61b1500.pg3二、软件目录: 三、安装步骤: (1)安装软件运行环境windowsdesktop-runtime 8.0.4; (2)选中安装文件arcgispro_33zh_cn_190127.exe&…...
Spring 获取Cookie/Session
获取Cookie/Session Cookie & Session获取Cookie传统方法获取使用 Spring 获取 Cookie 获取Session传统方法使用 SpringBoot 获取 Session简洁获取 Session HTTP协议 自身是属于 无状态协议(默认情况下 HTTP 协议的客户端与服务端的这次通信,和下次的通信之间没…...
小红书接口数据查询优化指南
小红书,作为分享生活、购物心得与美妆护肤经验的热门社交媒体平台,对开发者而言,其数据接口具有极高的实用价值。本指南将聚焦于如何通过接口高效查询小红书数据,并提供清晰的步骤与示例代码。 一、前置准备 在深入查询之前&…...
数据结构 - 图
文章目录 一、图的基本概念二、图的储存结构1、邻接矩阵2、邻接表 三、图的遍历1、广度优先遍历2、深度优先遍历 四、最小生成树1、概念2、Kruskal算法3、Prim算法 五、最短路径问题1、单源最短路径--Dijkstra算法2、单源最短路径--Bellman-Ford算法3、多源最短路径--Floyd-War…...
如何在Linux系统中管理和优化Swap空间
如何在Linux系统中管理和优化Swap空间 Swap空间简介 检查Swap空间 创建Swap空间 创建Swap文件 创建Swap分区 配置Swap空间 编辑fstab文件 设置vm.swappiness Swap使用策略 调整vm.vfs_cache_pressure 设置vm.min_free_kbytes Swap空间的监控 使用top命令 使用free命令 Swap…...
瑞格智慧心理服务平台 NPreenSMSList.asmx sql注入漏洞复现
0x01 产品描述: 瑞格智慧心理服务平台是一个集心理测评、心理咨询、心理危机干预、心理放松训练等功能于一体的综合性心理健康服务平台。该平台由北京瑞格心灵科技有限公司开发,旨在为用户提供全方位的心理健康服务。0x02 漏洞描述:…...
大模型是否具备推理能力?解读苹果新论文:GSM-Symbolic和GSM8K
在人工智能领域,大模型的推理能力一直备受关注。OpenAI的GPT-4和其他大模型的表现令人惊叹,但究竟是否具备真正的数学推理和抽象逻辑能力?最近,苹果的研究人员发表了一篇题为“GSM-Symbolic:理解大语言模型中数学推理的…...
不停弹窗的网站怎么做/百度指数峰值查询
1.程序概述:在MainActivity中设置一个按钮,按下按钮时触发监听器,监听器中设置一个intent,通过intent启动OtherActivity,运行OtherActivity显示出一个TextView。 2.设置监听器时,需要引入包,注意到OnClickL…...
wordpress主题在线制作/网络优化是干什么的
最近在知乎上,有许多人在邀请我去回答“Android前景怎么样、是不是要凉了、是不是应该考虑要转行?”等一系列的问题。 想着可能有很多人都有这样的担心,于是就赶紧写篇文章,来跟你们谈下Android开发的前景到底怎么样?…...
北京网站设计优刻/东莞网络排名优化
操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。计算机操作系统是随着计算机研究和应用的发展逐步形成并发展起来的&#…...
网站首页图/重庆做seo外包的
如题:sidecar 必须和 代理服务部署在一台服务器上,这个是sidecar的要求...
网站建设一条龙全包seo/北京seo管理
pdf文件太大怎么变小?如果你是Windows电脑,可以使用PDF编辑器来减小PDF文件的大小,比如这款出色的PDF压缩工具-易我PDF编辑器,它的“压缩”功能提供了两种减小文件大小的方法,这使得它既适合那些只想获得更小的PDF的人…...
wordpress标签链接优化/做网站优化推广
Python函数(四)-递归函数递归函数就是函数在自己内部调用自己 # -*- coding:utf-8 -*- __author__ "MuT6 Sch01aR" def Digui(n): print(n ...Python函数篇(二)之递归函数、匿名函数及高阶函数1.全局变量和局部变量 一般定义在程序的最开始的变量…...