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

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集合&#xff0c;key不可重复&#xff0c;按插入顺序排序* author zhangji** param <T>*/ public class CustomOrderlyMap&…...

Jenkins(持续集成与自动化部署)

Jenkins 是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具。 官网&#xff1a;https://www.jenkins.io/ GitLab安装使用 安装前提&#xff1a;内存至少需要4G 官方网站&#xff1a;https://about.gitlab.com/ 安装文档&#xff1a;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命令行不显示环境名

问题&#xff1a; 始终不显示环境名 解决 首先需要配置conda的环境变量 确保conda --version能显示版本 然后对cmd进行初始化&#xff0c;如果用的是vscode中的终端&#xff0c;那需要对powershell进行初始化 Windows CMD conda init cmd.exeWindows PowerShell conda …...

SpringBoot 2.6 集成es 7.17

引言 在现代应用开发中&#xff0c;Elasticsearch作为一个强大的搜索引擎和分析引擎&#xff0c;已经成为许多项目不可或缺的一部分。Spring Boot作为Java生态中最受欢迎的微服务框架之一&#xff0c;其对Elasticsearch的支持自然也是开发者关注的焦点。本文将详细介绍如何在S…...

加固服务器有什么用?

为什么越来越多的企业和个人都在加固他们的服务器&#xff1f;加固服务器不仅可以保护数据安全&#xff0c;还能提升整体系统的稳定性和可靠性。下面是聚名网的一些介绍。 加固服务器的首要目的就是提高安全性。随着网络攻击手段的不断演变&#xff0c;黑客和恶意软件的威胁也…...

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 编程助手和未来的编程方式

随着技术的飞速发展&#xff0c;编程技术领域在近年来经历了深刻的变革。从人工智能到低代码开发工具&#xff0c;新的技术趋势不断涌现&#xff0c;不仅大幅提高了开发效率&#xff0c;也重新定义了开发者的角色和工作方式。本篇博客将探讨几项当前最值得关注的编程技术&#…...

Android:文件管理:打开文件意图

三步走&#xff1a; 一、先在AndroidManifest.xml声明provider&#xff1a; <providerandroid:name"androidx.core.content.FileProvider"android:authorities"${applicationId}.FileProvider"android:exported"false"android:grantUriPermi…...

从纯虚类到普通类:提升C++ ABI兼容性的策略

在C编程中&#xff0c;纯虚类&#xff08;也被称为抽象类&#xff09;通常用于定义接口&#xff0c;而普通类则包含具体的实现。然而&#xff0c;在某些情况下&#xff0c;将纯虚类转换为普通类并提供默认实现&#xff0c;可以显著提升应用程序二进制接口&#xff08;ABI&#…...

QT中如何限制 限制QLineEdit只能输入字母,或数字,或某个范围内数字等限制约束?

在 Qt 中&#xff0c;你可以通过多种方式来限制 QLineEdit 只能输入特定类型的字符&#xff0c;如字母、数字或某个范围内的数字。以下是一些常见的方法&#xff1a; 1. 使用输入验证器&#xff08;QIntValidator, QDoubleValidator, QRegExpValidator&#xff09; Qt 提供了…...

Tailwind CSS 使用简介

参考网站安装 - Tailwind CSS 中文网 号称是开始使用 Tailwind CSS 通过 npm 安装 tailwindcss&#xff0c;并创建你的 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&#xff08;事件处理&#xff09;3. Multitasking&#xff08;多任务处理&#xff09;4. Push Notifications&#xff08;推送通知&…...

C语言实现库函数strlen

size_t是 unsigned int fgets会读入\n&#xff0c;用strcspn函数除去 assert判读指针是否为空指针&#xff0c;使用前要引头文件<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…...

从‘MOVED’错误到丝滑重定向:深入理解Redis集群客户端如何与16384个Slot打交道

从‘MOVED’错误到丝滑重定向&#xff1a;深入理解Redis集群客户端如何与16384个Slot打交道 当你第一次在Redis集群中执行SET user:1001 "Alice"时&#xff0c;可能会遇到一个令人困惑的错误——MOVED 1234 192.168.1.2:6379。这个看似简单的错误消息背后&#xff0c…...

Skills到底怎么装?本地、ClawHub、命令行,三种方式全拆解

关于 OpenClaw Skills 的安装与调用&#xff0c;官方提供了非常灵活的机制&#xff0c;覆盖了从零基础用户到高级开发者的所有场景。核心思路是 “命令行手动管理 自然语言自动处理” 相结合。 以下为你整理的四种主流安装方式及核心调用命令&#xff1a; &#x1f6e0;️ 核心…...

Perfetto上下文切换分析终极指南:快速定位进程调度开销问题

Perfetto上下文切换分析终极指南&#xff1a;快速定位进程调度开销问题 【免费下载链接】perfetto Production-grade client-side tracing, profiling, and analysis for complex software systems. 项目地址: https://gitcode.com/GitHub_Trending/pe/perfetto Perfett…...

JavaScript中Nodejs环境内存限制与V8堆大小调整

...

用PyTorch的F.cosine_similarity实现文本/向量两两相似度计算:以推荐系统为例

PyTorch向量相似度计算的工程实践&#xff1a;从原理到推荐系统实战 在推荐系统和自然语言处理领域&#xff0c;向量相似度计算是最基础也最频繁的操作之一。想象一下这样的场景&#xff1a;你的推荐系统需要实时为百万级用户计算他们可能感兴趣的物品&#xff0c;而每个用户和…...

Markdown图片排版救星:5分钟搞定自适应大小和响应式布局(附CSS片段)

Markdown图片排版救星&#xff1a;5分钟搞定自适应大小和响应式布局&#xff08;附CSS片段&#xff09; 在技术写作的世界里&#xff0c;Markdown因其简洁高效而备受青睐。但当我们试图在Markdown文档中插入图片时&#xff0c;往往会遇到一个尴尬的现实&#xff1a;默认的图片处…...

Cats Blender插件终极指南:如何快速将3D模型优化并导入VRChat

Cats Blender插件终极指南&#xff1a;如何快速将3D模型优化并导入VRChat 【免费下载链接】cats-blender-plugin :smiley_cat: A tool designed to shorten steps needed to import and optimize models into VRChat. Compatible models are: MMD, XNALara, Mixamo, DAZ/Poser,…...

实战指南:OpCore-Simplify如何让黑苹果EFI配置从技术挑战变为积木搭建

实战指南&#xff1a;OpCore-Simplify如何让黑苹果EFI配置从技术挑战变为积木搭建 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 当我们尝试在非苹果…...

如何快速上手Fiji:科学图像分析的终极完整指南

如何快速上手Fiji&#xff1a;科学图像分析的终极完整指南 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji Fiji是一个"开箱即用"的ImageJ发行版&#xff0c;专…...

虚拟世界不再需要“用户”,只需要“意识锚点”?——2026奇点大会最震撼闭门议题首次对外解密

第一章&#xff1a;虚拟世界不再需要“用户”&#xff0c;只需要“意识锚点”&#xff1f;——2026奇点大会最震撼闭门议题首次对外解密 2026奇点智能技术大会(https://ml-summit.org) 从身份认证到意识注册&#xff1a;范式迁移的临界点 传统数字身份体系正遭遇根本性失效&a…...