Python 数据结构揭秘:栈与队列
栈(Stack)
定义
栈是一种后进先出(Last In First Out, LIFO)的数据结构。它类似于一个容器,只能在一端进行插入和删除操作。栈有两个主要的操作:push(入栈)和 pop(出栈).
基本操作
- push(入栈):将一个元素添加到栈顶.
def push(self, item):self.items.append(item) - pop(出栈):移除栈顶的元素,并返回该元素.
def pop(self):if not self.is_empty():return self.items.pop()return None - peek(查看栈顶元素):查看栈顶的元素,但不移除它.
def peek(self):if not self.is_empty():return self.items[-1]return None - is_empty(检查栈是否为空):判断栈是否为空.
def is_empty(self):return len(self.items) == 0 - size(获取栈的大小):返回栈中元素的数量.
def size(self):return len(self.items)
实现方式
栈可以用数组或链表来实现。以下是使用 Python 列表实现栈的完整示例:
class Stack:def __init__(self):self.items = []def push(self, item):self.items.append(item)def pop(self):if not self.is_empty():return self.items.pop()return Nonedef peek(self):if not self.is_empty():return self.items[-1]return Nonedef is_empty(self):return len(self.items) == 0def size(self):return len(self.items)
应用场景
- 函数调用栈:在编程语言中,函数调用时会使用栈来存储函数的局部变量和返回地址等信息.
- 表达式求值:用于计算算术表达式,如逆波兰表达式(后缀表达式)的求值.
- 回溯算法:如迷宫求解、八皇后问题等,使用栈来保存回溯过程中的状态.
- 页面浏览历史:浏览器的前进和后退功能可以使用栈来实现.
队列(Queue)
定义
队列是一种先进先出(First In First Out, FIFO)的数据结构。它类似于一个队列,元素从一端进入,从另一端出去。队列有两个主要的操作:enqueue(入队)和 dequeue(出队).
基本操作
- enqueue(入队):将一个元素添加到队列的尾部.
def enqueue(self, item):self.items.append(item) - dequeue(出队):移除队列头部的元素,并返回该元素.
def dequeue(self):if not self.is_empty():return self.items.pop(0)return None - peek(查看队首元素):查看队列头部的元素,但不移除它.
def peek(self):if not self.is_empty():return self.items[0]return None - is_empty(检查队列是否为空):判断队列是否为空.
def is_empty(self):return len(self.items) == 0 - size(获取队列的大小):返回队列中元素的数量.
def size(self):return len(self.items)
实现方式
队列可以用数组或链表来实现。以下是使用 Python 列表实现队列的完整示例:
class Queue:def __init__(self):self.items = []def enqueue(self, item):self.items.append(item)def dequeue(self):if not self.is_empty():return self.items.pop(0)return Nonedef peek(self):if not self.is_empty():return self.items[0]return Nonedef is_empty(self):return len(self.items) == 0def size(self):return len(self.items)
应用场景
- 任务调度:操作系统中的进程调度、打印机任务队列等,按照任务到达的顺序进行调度.
- 缓冲处理:如网络数据包的传输缓冲、音频播放缓冲等,确保数据的顺序性和完整性.
- 广度优先搜索(BFS):在图的遍历算法中,使用队列来存储待访问的节点.
- 客户服务系统:如银行排队系统、呼叫中心等,按照客户到达的顺序提供服务.
总结
- 栈:适合需要回溯或撤销操作的场景,如函数调用、表达式求值等.
- 队列:适合需要保持元素顺序的场景,如任务调度、缓冲处理等.
栈和队列在实际应用中非常广泛,理解它们的原理和操作方式对于解决各种编程问题具有重要意义.
相关文章:
Python 数据结构揭秘:栈与队列
栈(Stack) 定义 栈是一种后进先出(Last In First Out, LIFO)的数据结构。它类似于一个容器,只能在一端进行插入和删除操作。栈有两个主要的操作:push(入栈)和 pop(出栈…...
常见的框架漏洞
1.Thinkphp Thinkphp5x远程命令执行及getshell 搭建靶场 cd vulhub/thinkphp/5-rce docker-compose up -d 首页 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖,通过覆盖类的核心属性filter导致rce,其攻击点较为多&…...
在C++中实现一个能够捕获弹窗、检查内容并在满足条件时点击按钮的程序;使用python的方案
在C中实现一个能够捕获弹窗、检查内容并在满足条件时点击按钮的程序是相当复杂的,因为C本身并不直接提供高级的GUI自动化功能。通常,这样的任务会使用Windows API(如User32.dll中的函数)或者一些第三方库(如UIAutomati…...
《Vue3实战教程》26:Vue3Transition
如果您有疑问,请观看视频教程《Vue3实战教程》...
【架构设计(一)】常见的Java架构模式
常见的 Java 架构模式解析 在 Java 开发领域,选择合适的架构模式对于构建高效、可维护且能满足业务需求的软件系统至关重要。本文将深入探讨几种常见的 Java架构模式,包括单体架构与微服务架构、分层架构与微服务架构的对比,以及事件驱动架构…...
自定义有序Map
package cn.ziqirj.common.utils;import lombok.Getter; import lombok.Setter;import java.util.ArrayList; import java.util.List;/*** 模拟Map集合,key不可重复,按插入顺序排序* author zhangji** param <T>*/ public class CustomOrderlyMap&…...
Jenkins(持续集成与自动化部署)
Jenkins 是一个开源软件项目,是基于Java开发的一种持续集成工具。 官网:https://www.jenkins.io/ GitLab安装使用 安装前提:内存至少需要4G 官方网站:https://about.gitlab.com/ 安装文档:https://docs.gitlab.c…...
redis7基础篇2 redis的哨兵模式2
目录 一 哨兵模式 1.1 redis的哨兵模式作用 1.2 redis的哨兵模式架构 1.3 redis的哨兵模式参数说明 二 redis的哨兵模式搭建 2.1 redis的主从复制模式 2.2 redis的sentinel配置文件 2.3 redis的实例节点和sentinel节点启动 3.3 redis的哨兵模式原理 3.3.1 redis的哨兵…...
windows终端conda activate命令行不显示环境名
问题: 始终不显示环境名 解决 首先需要配置conda的环境变量 确保conda --version能显示版本 然后对cmd进行初始化,如果用的是vscode中的终端,那需要对powershell进行初始化 Windows CMD conda init cmd.exeWindows PowerShell conda …...
SpringBoot 2.6 集成es 7.17
引言 在现代应用开发中,Elasticsearch作为一个强大的搜索引擎和分析引擎,已经成为许多项目不可或缺的一部分。Spring Boot作为Java生态中最受欢迎的微服务框架之一,其对Elasticsearch的支持自然也是开发者关注的焦点。本文将详细介绍如何在S…...
加固服务器有什么用?
为什么越来越多的企业和个人都在加固他们的服务器?加固服务器不仅可以保护数据安全,还能提升整体系统的稳定性和可靠性。下面是聚名网的一些介绍。 加固服务器的首要目的就是提高安全性。随着网络攻击手段的不断演变,黑客和恶意软件的威胁也…...
Personal APP
1、Matlab 2023b https://www.bilibili.com/opus/887246540317392920 https://blog.csdn.net/qq_25719943/article/details/138096918 https://www.jokerdown.com/22886.html 2、 3、...
探索最新的编程技术趋势:AI 编程助手和未来的编程方式
随着技术的飞速发展,编程技术领域在近年来经历了深刻的变革。从人工智能到低代码开发工具,新的技术趋势不断涌现,不仅大幅提高了开发效率,也重新定义了开发者的角色和工作方式。本篇博客将探讨几项当前最值得关注的编程技术&#…...
Android:文件管理:打开文件意图
三步走: 一、先在AndroidManifest.xml声明provider: <providerandroid:name"androidx.core.content.FileProvider"android:authorities"${applicationId}.FileProvider"android:exported"false"android:grantUriPermi…...
从纯虚类到普通类:提升C++ ABI兼容性的策略
在C编程中,纯虚类(也被称为抽象类)通常用于定义接口,而普通类则包含具体的实现。然而,在某些情况下,将纯虚类转换为普通类并提供默认实现,可以显著提升应用程序二进制接口(ABI&#…...
QT中如何限制 限制QLineEdit只能输入字母,或数字,或某个范围内数字等限制约束?
在 Qt 中,你可以通过多种方式来限制 QLineEdit 只能输入特定类型的字符,如字母、数字或某个范围内的数字。以下是一些常见的方法: 1. 使用输入验证器(QIntValidator, QDoubleValidator, QRegExpValidator) Qt 提供了…...
Tailwind CSS 使用简介
参考网站安装 - Tailwind CSS 中文网 号称是开始使用 Tailwind CSS 通过 npm 安装 tailwindcss,并创建你的 tailwind.config.js 文件。 npm install -D tailwindcss npx tailwindcss init 在 tailwind.config.js 文件中添加所有模板文件的路径。 /** type {im…...
iOS 逆向学习 - iOS Architecture Cocoa Touch Layer
iOS 逆向学习 - iOS Architecture Cocoa Touch Layer 一、Cocoa Touch Layer 简介二、Cocoa Touch Layer 的核心功能1. UIKit2. Event Handling(事件处理)3. Multitasking(多任务处理)4. Push Notifications(推送通知&…...
C语言实现库函数strlen
size_t是 unsigned int fgets会读入\n,用strcspn函数除去 assert判读指针是否为空指针,使用前要引头文件<assert.h> #include <stdio.h> #include <assert.h> size_t mystrlen(const char* str) {assert(str);size_t count 0;while …...
050_小驰私房菜_MTK Camera debug, data rate 、mipi_pixel_rate 确认
mipi_pixel_rate = data rate * 4 / 10 (4 是表示4lane,10表示raw数据是10bit) mipi_pixel_rate 信息,我们可以通过 sentest命令打印看到: 下面的信息我们可以看到,mipi_pixel_rate = 501.357739Mpps,mipi rate = 10000000,是对应的我们驱动文件里面配置写的mipi_pixel_r…...
SDMatte效果深度评测:复杂人像与发丝级抠图的惊艳表现
SDMatte效果深度评测:复杂人像与发丝级抠图的惊艳表现 1. 开篇:重新定义图像抠图标准 当你在电商平台看到完美无瑕的商品展示图,或者在电影中看到主角与虚拟场景无缝融合时,背后都离不开一项关键技术——图像抠图。传统抠图工具…...
告别KVM切换器!用微软官方免费神器Mouse without Borders,一套键鼠搞定四台Windows电脑
微软Mouse without Borders:四台Windows电脑共享键鼠的终极方案 当你的办公桌上摆着两台甚至四台Windows电脑时,每次切换设备都要重新抓取不同的鼠标和键盘,这种体验简直让人抓狂。物理KVM切换器虽然能解决问题,但价格昂贵且线材杂…...
【AGI决策能力评估权威框架】:2024全球7大实验室实测数据+3层可验证指标体系首次公开
第一章:AGI的规划与决策能力评估 2026奇点智能技术大会(https://ml-summit.org) AGI的规划与决策能力并非单一维度指标,而是融合目标分解、状态建模、多步推理、反事实评估与实时适应的复合认知过程。当前主流评估框架已从静态任务准确率转向动态环境下…...
自建 code-server vs CloudStudio:为什么插件不能用?
# 自建 code-server vs CloudStudio:为什么插件不能用?## 问题背景办公室有一台 Lubuntu 电脑,安装了 code-server,通过内网穿透在家的浏览器可以正常访问和使用。但是有两个问题:- CodeBuddy 插件无法使用- MySQL 插件…...
FPGA实战:手把手教你用CORDIC Translate IP核搞定复数转极坐标(附定点数归一化避坑指南)
FPGA实战:CORDIC Translate IP核实现复数转极坐标的工程化解决方案 在数字信号处理领域,复数到极坐标的转换是一个基础但关键的操作。无论是通信系统中的载波同步、雷达信号处理中的目标检测,还是电机控制中的矢量变换,都需要高效…...
HTML函数在超频CPU上更流畅吗_超频对HTML函数影响【技巧】
HTML函数不受CPU超频影响,其执行速度由浏览器引擎、事件循环和网络栈决定;超频仅提升Web Workers中计算密集型任务性能,却可能降低计时精度并暴露竞态问题。HTML函数根本不受CPU超频影响超频CPU不会让 document.getElementById、setTimeout 或…...
2026届学术党必备的十大AI辅助写作神器推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智慧助力学术写作现今已然成了现实,当下,大型语言模组能够以效率…...
告别ESP32环境配置噩梦:用Python虚拟环境一劳永逸管理ESP-IDF依赖
ESP32开发者的Python虚拟环境实战指南:彻底解决依赖冲突难题 每次打开ESP-IDF项目时,那些烦人的Python依赖报错是不是让你血压飙升?不同项目间的包版本冲突是否让你在pip install和pip uninstall之间反复横跳?作为一名长期奋战在E…...
别再让IRF分裂搞瘫网络!手把手教你配置H3C BFD MAD检测(附排错命令)
H3C IRF分裂应急指南:BFD MAD检测配置与深度排错实战 凌晨三点,数据中心告警声骤然响起——核心交换机的IRF链路突然中断,网络中出现两台"一模一样"的交换机,IP地址冲突、路由表震荡、业务开始大面积瘫痪。这不是演习&a…...
Windows Cleaner:三步解决C盘爆红的终极清理指南
Windows Cleaner:三步解决C盘爆红的终极清理指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为Windows电脑卡顿、C盘爆红而烦恼吗?…...
