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

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)是一种特殊的二叉树,它具有以下性质:

  1. 每个节点都有一个键值(key)。

  2. 对于每个节点,其左子树中的所有节点的键值都小于该节点的键值。

  3. 对于每个节点,其右子树中的所有节点的键值都大于该节点的键值。

  4. 左子树和右子树也分别是二叉查找树。

  5. 二叉查找树不允许出现键值相等的结点。

代码实现:

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 方法是一个递归方法,它处理四种情况:

  1. 如果树为空,返回 None

  2. 如果键值小于当前节点的键值,则递归地移除左子树中的节点。

  3. 如果键值大于当前节点的键值,则递归地移除右子树中的节点。

  4. 如果键值等于当前节点的键值,那么根据当前节点的情况来处理:

    • 如果当前节点没有子节点,则返回 None

    • 如果当前节点只有一个子节点,则返回那个子节点。

    • 如果当前节点有两个子节点,则找到右子树中的最小值节点来替代当前节点,并递归地删除这个最小值节点。

_min_value_node 方法用于找到并返回从给定节点开始的子树中的最小值节点。它通过不断访问当前节点的左子节点直到到达最左边的叶子节点来实现。

Python包和模块

当使用Python编程时,包(Packages)和模块(Modules)是两个关键的概念,它们有助于组织、管理和复用代码。

模块(Modules)

一个.py 文件就是一个模块

  • 把相关功能的函数等放在一起有利于管理,有利于多人合作开发

  • 模块的分类

    1. 内置模块(在python3 程序内部,可以直接使用)

    2. 标准库模块(在python3 安装完后就可以使用的 )

    3. 第三方模块(需要下载安装后才能使用)

    4. 自定义模块(用户自己编写)

    5. 模块名如果要给别的程序导入,则模块名必须是 标识符

导入模块

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地址 使用循环个数来实现分屏 效果图&#xff0c;四屏 九屏 dom代码 <div class"icon"><div class"icon-box"><span class"text">分屏&#xff1a;</span><el-icon …...

【网页设计】学成在线案例

Demo 典型的企业级网站&#xff0c;目的是为了整体感知企业级网站的布局流程&#xff0c;复习以前知识。 集合代码见文章最后。 5.1 准备素材和工具 学成在线 PSD 源文件。开发工具 PS&#xff08;切图&#xff09; sublime&#xff08;代码&#xff09; chrome&#xff0…...

一篇文章总结 SQL 基础知识点

1. 官方文档 MySQL&#xff1a;https://dev.mysql.com/doc/refman/8.4/en/ SQL Server&#xff1a;What is SQL Server? - SQL Server | Microsoft Learn Oracle&#xff1a;https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/loe.html 2. 术语 SQL S…...

vue Element U 解决表格数据不更新问题

最近在使用 Vue 和 Element UI 开发后台管理系统时&#xff0c;操作表单数据重新请求表格接口后遇到表格数据不更新的问题。后面查阅了些资料&#xff0c;这通常是由于 Vue 的响应式系统没有检测到数据的变化&#xff0c;或者数据更新后没有正确地触发视图的重新渲染。以下是一…...

PeView 命令行PE文件解析工具

PeView 是一款基于C/C开发的命令行版PE文件解析工具&#xff0c;专门用于解析Windows可执行文件并提供详尽的文件结构和交互式查询功能&#xff0c;帮助用户理解和分析目标程序的内部构成&#xff0c;是逆向分析和软件调试中的重要工具&#xff0c;本次分享工具源代码及使用方法…...

微信小程序25__实现卡片变换

先看效果图 实现代码如下&#xff1a; <view class"page" style"filter:hue-rotate({{rotation}}deg)"><view class"prev" catchtap"toPrev">《《《</view><view class"next" catchtap"toNext&q…...

从Packet Tracer到EVE-NG:网络小白进阶实战,手把手教你用VMware部署第一个思科拓扑

从Packet Tracer到EVE-NG&#xff1a;网络工程师的虚拟化进阶指南 当你已经能够熟练使用Cisco Packet Tracer完成CCNA级别的实验&#xff0c;却发现这个教学工具无法满足你对真实网络环境模拟的渴望时&#xff0c;是时候考虑升级你的网络实验平台了。EVE-NG作为当前最强大的网…...

FastAPI + 异步 SQLAlchemy 实战:从零搭建图书管理 CRUD 项目

前言 本篇将从零开始&#xff0c;带你搭建一个完整的异步图书管理 CRUD 项目&#xff0c;覆盖环境搭建、数据库连接、模型定义、12 种核心接口实现。献给和博主一样刚踏入SQLAlchemy的新手小白们。 注意&#xff1a;本文基础知识较多&#xff0c;不需要的大佬可直接跳到具体操…...

C++智能指针详解:原理、使用及避坑指南

文章目录 前言 一、智能指针核心原理&#xff1a;RAII机制 二、C常用智能指针详解&#xff08;重点掌握后两种&#xff09; 三、智能指针高频坑点&#xff08;重中之重&#xff09; 四、三大智能指针对比&#xff08;选择指南&#xff09; 五、实战案例&#xff1a;智能指…...

微信消息自动转发:5分钟实现跨群智能消息同步

微信消息自动转发&#xff1a;5分钟实现跨群智能消息同步 【免费下载链接】wechat-forwarding 在微信群之间转发消息 项目地址: https://gitcode.com/gh_mirrors/we/wechat-forwarding 在微信群管理和团队协作中&#xff0c;你是否经常需要将重要消息手动转发到多个群聊…...

告别手动配网!用IEEE 1905.1协议实现Wi-Fi AP自动配置的保姆级流程拆解

告别手动配网&#xff01;用IEEE 1905.1协议实现Wi-Fi AP自动配置的保姆级流程拆解 想象一下&#xff0c;当你需要为三层别墅部署全屋Wi-Fi覆盖&#xff0c;或是为小型办公室搭建多AP无线网络时&#xff0c;传统方式需要逐个登录每个AP的后台&#xff0c;重复输入SSID、密码、…...

2026年最新英语单词AI辅助工具 帮英语学习者轻松提升背词效率

英语单词学习的核心痛点拆解我们团队做英语学习工具测评快5年了&#xff0c;后台收到最多的提问就是「有没有能真的提升背词效率的工具」&#xff0c;拆解下来行业的共性痛点其实很明确&#xff1a;第一是资源错配&#xff0c;80%的背词时间都花在已经掌握的词汇上&#xff0c;…...

DDR内存接口测试:从信号完整性到电源噪声的工程实践指南

1. DDR内存测试的核心挑战与价值在任何一个涉及高速数字信号的设计项目中&#xff0c;内存接口的验证都是决定系统稳定性的关键一环。从早期的SDRAM到如今主流的DDR4、DDR5乃至LPDDR系列&#xff0c;双倍数据速率&#xff08;DDR&#xff09;技术通过在每个时钟周期的上升沿和下…...

社区团购系统源码推荐:为什么越来越多团队开始关注 LikeShop 社区团购系统?

如果你最近在研究&#xff1a;社区团购系统源码社区团购平台搭建团长分销系统私域社区团购社区自提系统你会发现一个现象&#xff1a;越来越多人开始提到&#xff1a;“LikeShop社区团购系统”。尤其是在&#xff1a;生鲜团购社区零售社群团购县域电商社区便利店私域卖货这些场…...

SkillPilot:AI编程助手技能一键管理与安全部署实战

1. 项目概述与核心价值最近在折腾AI编程助手的时候&#xff0c;发现了一个挺有意思的痛点&#xff1a;虽然Claude Code、Cursor这些工具都支持通过SKILL.md文件来扩展功能&#xff0c;但每次想找个新技能&#xff0c;都得手动去GitHub上翻找、下载、配置&#xff0c;还得担心代…...

告别软件模拟!用GD32F303硬件I2C驱动AT24C02 EEPROM保姆级教程(附完整代码)

从软件模拟到硬件加速&#xff1a;GD32F303硬件I2C驱动AT24C02全流程解析 当你在嵌入式项目中频繁操作EEPROM时&#xff0c;是否遇到过这样的困扰&#xff1a;软件模拟I2C占用大量CPU资源&#xff0c;时序稳定性受中断影响&#xff0c;传输速率始终无法突破瓶颈&#xff1f;这些…...