数据结构(系列)

news2025/1/3 23:02:22

在Python中,列表(list)是一种基本的数据结构,它可以存储一系列的元素。列表是可变的,即可以对其进行增删改查操作。

栈(Stack)是一种具有特定限制的线性数据结构,在栈中,添加和删除元素只能在一端进行操作,这一端被称为栈顶。栈的特点是先进后出(LIFO,Last-In-First-Out),即最后进栈的元素最先出栈。

队列(Queue)也是一种线性数据结构,与栈不同的是,队列的元素从一端插入(称为队尾),从另一端删除(称为队首)。队列的特点是先进先出(FIFO,First-In-First-Out),即最先进入队列的元素最先出队列。

在Python中,可以使用列表来实现栈和队列的功能。

以上是基于列表的简单实现,实际上,Python提供了更高效的数据结构来实现栈和队列,分别是collections.deque(双向队列)queue.Queue

目录

数据结构:

列表:

栈:

基本代码

括号匹配问题:

队列

队列的实现:环形队列

队列的内置模块

双向队列 单向队列

类似于linux的tail命令


数据结构:

物理结构和逻辑结构

列表:

列表中的元素是怎么存储的:顺序存储。(一块连续的内存)

基本操作的时间复杂度:

a[2]:O(1)

append():O(1)

insert() remove() pop() :O(n)

数组和列表有两点不同:

  1. 数组的类型是相同的

  2. 数组长度固定

Python的列表是如何实现的?

栈:

基本代码

# 栈 封装成一个类
class Stack:
    def __init__(self):
        self.stack = []
​
    def push(self,element):
        self.stack.append(element)
​
    def pop(self):
        return self.stack.pop()
​
    def get_top(self):
        if len(self.stack) > 0:
            return self.stack[-1]
        else:
            return None
​
​
stack = Stack()
stack.push(0)
stack.push(1)
stack.push(2)
print(stack.pop())

括号匹配问题:

# 匹配问题
'''
string = input()
stack = []
match = {'}':'{',')':'(',']':'['}
for char in string:
    if char in {'(','{','['}:       # 集合
        stack.append(char)
    else:
        if len(stack) == 0 or stack.pop() != match[char]:
            print('False')
            break
if len(stack) == 0:
    print('True')
'''

队列

队列的实现:环形队列

class Queue:
    def __init__(self,size = 100):
        self.queue = [0 for _ in range(size)]
        self.size = size
        self.rear = 0       # 队尾指针
        self.front = 0      # 队首指针
​
    def push(self,element):
        if not self.is_filled():
            self.rear = (self.rear + 1) % self.size
            self.queue[self.rear] = element
        else:
            raise IndexError("queue is filled.")
​
    def pop(self):
        if not self.is_empty():
            self.front = (self.front + 1) % self.size
            return self.queue[self.front]
        else:
            raise IndexError("Queue is empty.")
​
    # 判断队空
    def is_empty(self):
        return self.rear == self.front
​
    # 判断队满
    def is_filled(self):
        return (self.rear+1) % self.size == self.front
​
​
q = Queue(5)
# 长度是5,只能存储4个数
q.push(4)
q.push(6)
q.push(5)
q.push(6)
print(q.pop())

队列的内置模块

双向队列 单向队列
# 队列内置模块
​
from collections import deque
​
q = deque([1,2,3,4],5)          # 第二个可选参数 5 代表最长长度如果队满直接默认队首出队
#单向
q.append(1)         # 队尾进队
print(q.popleft())        # 队首出队
​
# 双向队列
# q.appendleft(1)     # 队首进队
# q.pop()     # 队尾出队
类似于linux的tail命令

取后n个

from collections import deque
​
def tail(n):
    with open('test.txt','r') as f:
        q = deque(f,n)
        return q
​
​
print(tail(5))

以上是基于列表的简单实现,实际上,Python提供了更高效的数据结构来实现栈和队列,分别是collections.dequequeue.Queue(多线程安全队列)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】HTTP cookie与session

在登录B站时,有登录和未登录两种状态, 问题:B站是如何认识我这个登录用户的?问题:HTTP是无状态、无连接的,怎么能够记住我? HTTP协议是无状态、无连接的。比如客户端(浏览器&#…

Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成logback 及 原理分析

文章目录 Pre官网集成步骤POM依赖使用第一步:编写 Logback 的配置文件第二步:在代码中使用 SLF4J 原理分析1. 获取对应的 ILoggerFactory2. 根据 ILoggerFactory 获取 Logger 实例3. 日志记录过程 小结 Pre Java - 日志体系_Apache Commons Logging&…

5.系统学习-PyTorch与多层感知机

PyTorch与多层感知机 前言PyTroch 简介张量(Tensor)张量创建张量的类型数据类型和 dtype 对应表张量的维度变换:张量的常用操作矩阵或张量计算 Dataset and DataLoaderPyTorch下逻辑回归与反向传播数据表格 DNN(全连结网络&#x…

ubuntu 如何使用vrf

在Ubuntu或其他Linux系统中,您使用ip命令和sysctl命令配置的网络和内核参数通常是临时的,这意味着在系统重启后这些配置会丢失。为了将这些配置持久化,您需要采取一些额外的步骤。 对于ip命令配置的网络接口和路由,您可以将这些配…

Unity Shader TexelSize的意义

TexelSize在制作玻璃折射效果时会用到。 // Get the normal in tangent space fixed3 bump UnpackNormal(tex2D(_BumpMap, i.uv.zw)); // Compute the offset in tangent space float2 offset bump.xy * _Distortion * _RefractionTex_TexelSize.xy; i.scrPos.xy offset * i…

嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别

引言:在现代嵌入式硬件设计中,开关元件作为电路中的重要组成部分,起着至关重要的作用。三种主要的开关元件——IGBT(绝缘栅双极型晶体管)、MOSFET(金属氧化物半导体场效应晶体管)和三极管&#…

【亲测有效】k8s分布式集群安装部署

1.实验环境准备 准备三台centos7虚拟机,用来部署k8s集群: master(hadoop1,192.168.229.111)配置: 操作系统:centos7.3以及更高版本都可以配置:4核cpu,4G内存&#xff…

【SQL server】教材数据库(5)

使用教材数据库(1)中的数据表完成以下题目: 1 根据上面基本表的信息定义视图显示每个学生姓名、应缴书费 2 观察基本表数据变化时,视图中数据的变化。 3利用视图,查询交费最高的学生。 1、create view 学生应缴费视…

去除el-tabs 下面的灰色横线,并修改每一项的左右间距,和字体颜色

HTML <el-tabs v-model"activeName" class"demo-tabs" tab-click"handleClick"><el-tab-pane label"全部" :name"null"></el-tab-pane><el-tab-pane label"问答陪练" name"general-t…

纯血鸿蒙ArkUI的网格布局详解

网格布局概要 网格布局是由行和列分割的单元格组成&#xff0c;通过指定项目所在的单元格做出各种各样的布局。网格布局具有较强的页面均分能力&#xff0c;子组件占比控制能力&#xff0c;是一种重要的自适应布局组件&#xff0c;其使用场景有九宫格图片展示、日历、计算器等…

LeRobot(1)

Train python lerobot/scripts/train.py \ policyact \ envaloha \ env.taskAlohaInsertion-v0 \ dataset_repo_idlerobot/aloha_sim_insertion_human \ load_data一直报错&#xff0c;忘记截图了&#xff0c;反正是ssh报错&#xff0c;下不下来&#xff0c;网…

【C++】B2085 第 n 小的质数

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述题目内容输入格式输出格式题目示例 &#x1f4af;原始做法分析解法源码解析1. 步骤分析2. 问题分析3. 性能问题 &#x1f4af;老师提供的优化解法优化代码每部分解…

Node.js详细安装教程

1.下载 [名称]&#xff1a;Node.js [大小]&#xff1a;26.4 MB [语言]&#xff1a;简体中文 [安装环境]&#xff1a;Win7/Win8/Win10 [Node.js15.11.0下载链接]&#xff1a; 通过网盘分享的文件&#xff1a;Node.js 链接: https://pan.baidu.com/s/12WlNlWlX-1ppdhz…

IDEA 搭建 SpringBoot 项目之配置 Maven

目录 1?配置 Maven 1.1?打开 settings.xml 文件1.2?配置本地仓库路径1.3?配置中央仓库路径1.4?配置 JDK 版本1.5?重新下载项目依赖 2?配置 idea 2.1?在启动页打开设置2.2?配置 Java Compiler2.3?配置 File Encodings2.4?配置 Maven2.5?配置 Auto Import2.6?配置 C…

SpringCloud 系列教程:微服务的未来(三)IService接口的业务实现

本文将介绍 IService 接口的基本业务操作、复杂业务操作、Lambda 方法的使用以及批量增加操作&#xff0c;帮助开发者深入了解如何高效地利用 MyBatis-Plus 提供的功能进行数据库操作。无论是简单的单表查询&#xff0c;还是复杂的多表联动&#xff0c;甚至是大数据量的批量操作…

MAC环境安装(卸载)软件

MAC环境安装&#xff08;卸载&#xff09;软件 jdknode安装node&#xff0c;并实现不同版本的切换背景 卸载node从node官网下载pkg安装的node卸载用 homebrew 安装的node如果你感觉删的不够干净&#xff0c;可以再细分删除验证删除结果 jdk 1.下载jdk 先去官网下载自己需要的版…

VScode SSH 错误:Got bad result from install script 解決

之前vscode好好的&#xff0c;某天突然连接报错如下 尝试1. 服务器没有断开,ssh可以正常连接 2. 用管理员权限运行vscode&#xff0c;无效 3. 删除服务器上的~/.vscode-server 文件夹&#xff0c;无效 试过很多后&#xff0c;原来很可能是前一天anaconda卸载导致注册表项 步…

MATLAB中与矩阵运算相关的函数简介

d e t ( a ) det(a) det(a)表示求方阵的秩 t r a c e ( a ) trace(a) trace(a)表示求方阵对角线之和 i n v ( a ) inv(a) inv(a)表示求方阵的逆矩阵 t r i u ( a ) triu(a) triu(a)表示求矩阵的上三角部分&#xff0c;其余变成0 t r i l ( a ) tril(a) tril(a)表示求矩阵的…

20241227通过配置nomodeset参数解决更新grub之后,ubuntu20.04.5无法启动的问题

20241227通过配置nomodeset参数解决更新grub之后&#xff0c;ubuntu20.04.5无法启动的问题 2024/12/27 17:34 0.397475]pci0000:00:07.0:DPC:RPPI0 l0gsize 0 is invalid dev/nvmeon1p9:clean,251849/4276224 files,3266309/17089792 blocks 缘起&#xff1a;公司电脑要安装加密…

46. Three.js案例-创建颜色不断变化的立方体模型

46. Three.js案例-创建颜色不断变化的立方体模型 实现效果 知识点 Three.js基础组件 WebGLRenderer THREE.WebGLRenderer是Three.js提供的用于渲染场景的WebGL渲染器。它支持抗锯齿处理&#xff0c;可以设置渲染器的大小和背景颜色。 构造器 antialias: 是否开启抗锯齿&am…