学习第九天-栈
- 栈的定义:栈是一种线性表数据结构,仅允许在表的一端(栈顶)进行插入(入栈)和删除(出栈)操作。没有数据元素时为「空栈」,遵循「后进先出(LIFO)」原则。
- 栈的存储方式
- 顺序栈:利用地址连续的存储单元存放元素,用指针
top指示栈顶位置,可借助 Python 的列表实现。 - 链式栈:通过单链表实现,元素插入到链表首个节点前,
top指向链表头节点。
- 顺序栈:利用地址连续的存储单元存放元素,用指针
- 栈的基本操作:包括初始化空栈、判断栈是否为空、判断栈是否已满(仅适用于顺序栈)、插入元素、删除元素和获取栈顶元素。
- 栈的应用:常作为辅助存储结构保存和取用信息,如函数调用栈、浏览器前进后退功能;利用后进先出规则保证特定存取顺序,如翻转元素顺序、铁路列车车辆调度,还可用于判断有效括号等问题。
优化内容
栈的定义与概念
栈(Stack),也被称为堆栈,是一种特殊的线性表数据结构。它有两个关键特征:一是操作的限制性,只允许在表的一端进行数据的插入和删除操作,这一端被称作「栈顶(top)」,而另一端则是「栈底(bottom)」;二是遵循「后进先出(Last In First Out,简称 LIFO)」原则。当栈中没有任何数据元素时,我们称其为「空栈」 。
在栈中,插入操作也叫「入栈」或「进栈」,删除操作则叫「出栈」或「退栈」。从线性表的角度看,栈中元素存在前驱后继的线性关系,元素按顺序进栈,栈顶元素是最后进栈的那个。从后进先出原则来说,每次出栈删除的都是当前栈顶元素,最先进入的元素位于栈底,最后进入的在栈顶。
栈的存储方式
- 顺序栈:顺序栈是栈的顺序存储结构,它利用一组地址连续的存储单元,从栈底到栈顶依次存放元素。通过一个指针
top来指示栈顶元素在顺序栈中的位置。在 Python 中,借助列表(list)就可以方便地实现顺序栈。列表的特性使其能够很好地模拟顺序栈的操作,利用列表的索引和内置方法,能轻松完成元素的入栈和出栈等操作。 - 链式栈:链式栈采用单链表的方式实现栈。在链式栈中,元素按照插入顺序,依次插入到链表的第一个节点之前,栈顶指针
top始终指向链表的头节点位置。这种存储方式的优势在于,插入和删除操作无需移动大量元素,效率较高,尤其适用于频繁进行插入和删除操作的场景。
栈的基本操作
- 初始化空栈:创建一个空栈时,需要定义栈的大小
size(在顺序栈中用于判断栈是否已满),同时设置栈顶元素指针top,通常初始时top指向栈底(在顺序栈中可能是 - 1 或 0,具体取决于实现方式;在链式栈中可能是None)。 - 判断栈是否为空:该操作用于检查栈中是否有元素。当栈为空时,返回
True;栈不为空时,返回False。在栈的删除操作和获取当前栈顶元素操作前,通常需要先判断栈是否为空,以避免空指针异常或其他错误。 - 判断栈是否已满:此操作仅适用于顺序栈。当栈中的元素数量达到预先设定的栈大小时,返回
True,表示栈已满;否则返回False。在顺序栈插入元素前,需判断栈是否已满,防止栈溢出;在获取栈顶元素操作时,也可能需要判断栈是否已满,以确保操作的正确性。 - 插入元素(进栈、入栈):这一操作相当于在线性表的末尾添加一个新的数据元素。在顺序栈中,先将新元素放入
top指针所指位置,然后top指针上移;在链式栈中,创建新节点,将其插入到链表头节点之前,并更新top指针指向新节点。 - 删除元素(出栈、退栈):该操作类似在线性表末尾删除最后一个数据元素。顺序栈中,先取出
top指针所指元素,然后top指针下移;链式栈中,删除头节点(即栈顶元素),并更新top指针指向下一个节点。 - 获取栈顶元素:获取栈顶元素的操作与插入和删除不同,它不会改变栈顶指针
top的位置。顺序栈中,直接返回top指针所指元素;链式栈中,返回头节点(栈顶元素)的值。
栈的应用
栈在算法和程序中应用广泛,主要体现在两个方面:
- 辅助存储结构:栈能够方便地保存和取用信息,常被用作算法和程序中的辅助存储结构。例如,在操作系统中,函数调用栈用于记录函数调用的相关信息,包括函数参数、局部变量等。当一个函数被调用时,其相关信息入栈;函数执行结束后,这些信息出栈。在浏览器中,前进和后退功能也是借助栈来实现的,浏览过的页面地址按顺序入栈,通过栈操作实现页面的回溯和前进。
- 保证特定存取顺序:基于栈的后进先出规则,可以保证特定的存取顺序。比如,在翻转一组元素的顺序时,将元素依次入栈,再依次出栈,就能得到翻转后的顺序。在铁路列车车辆调度场景中,利用栈的特性可以实现对列车车厢的合理调度,提高调度效率。
以判断有效的括号这道简单的算法题为例,给定一个只包含()、{}、[]的字符串s,判断字符串是否有效。有效的字符串需满足:左括号必须用相同类型的右括号闭合,且左括号必须以正确的顺序闭合。这道题就可以利用栈来解决,遍历字符串,遇到左括号入栈,遇到右括号时,检查栈顶元素是否与之匹配,若匹配则栈顶元素出栈,否则字符串无效。遍历结束后,若栈为空,则字符串有效,否则无效。
相关文章:
学习第九天-栈
栈的定义:栈是一种线性表数据结构,仅允许在表的一端(栈顶)进行插入(入栈)和删除(出栈)操作。没有数据元素时为「空栈」,遵循「后进先出(LIFO)」原…...
Java基础关键_016_System 类
目 录 一、常用属性 1.static final PrintStream err 2.static final InputStream in 3.static final PrintStream out 二、常用方法 1.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 2.currentTimeMillis() 3.nanoTime() 4. exit(int st…...
计算机毕设JAVA——某高校宿舍管理系统(基于SpringBoot+Vue前后端分离的项目)
文章目录 概要项目演示图片系统架构技术运行环境系统功能简介 概要 网络上许多计算机毕设项目开发前端界面设计复杂、不美观,而且功能结构十分单一,存在很多雷同的项目:不同的项目基本上就是套用固定模板,换个颜色、改个文字&…...
【 实战案例篇三】【某金融信息系统项目管理案例分析】
大家好,今天咱们来聊聊金融行业的信息系统项目管理。这个话题听起来可能有点专业,但别担心,我会尽量用大白话给大家讲清楚。金融行业的信息系统项目管理,说白了就是如何高效地管理那些复杂的IT项目,确保它们按时、按预算、按质量完成。咱们今天不仅会聊到一些理论,还会通…...
vivado 避免本地时钟、创建输出时钟
避免本地时钟 本地时钟是使用常规结构资源而不是专用全局时钟资源进行布线的时钟网络。在大多数情况下, Vivado 综合和 Vivado 逻辑优化工具在架构要求的时钟缓存或具有超过 30 个时钟负载的时钟网络中插入时钟缓存。本地时钟通常发生在: • 全局时…...
二十三种设计模式
2 工厂方法模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通…...
uniapp 中引入使用uView UI
文章目录 一、前言:选择 uView UI的原因二、完整引入步骤1. 安装 uView UI2. 配置全局样式变量(关键!)3. 在 pages.json中添加:4. 全局注册组件5. 直接使用组件 五、自定义主题色(秒换皮肤) 一、…...
用冒泡排序法模拟qsort函数
目录 1.前言 2.qsort函数的介绍 3.冒泡法回顾 4.模拟qsort---buble_sort 4.1 buble_sort格式 4.2 主函数,以int类型为例 4.3comp_int函数的功能设计 4.4 swap函数的功能设计 5. 总代码概览 1.前言 今天,小邓儿带大家用冒泡排序法来模拟一下qs…...
DCN讲解
DCN是DeepFM的升级版,后者是只能做二阶交叉特征,随着阶数上升,模型复杂度大幅提高,且FM网络层较浅,表达能力有限。google团队通过构建深度交叉网络来自动进行特征的高阶交叉,且时空复杂度均为线性增长&…...
nginx的作用和应用场景
Nginx 是一款高性能的开源 Web 服务器和反向代理服务器,以其高效处理高并发连接和低资源消耗著称。以下是其核心作用及典型应用场景的详细解析: 一、Nginx 的核心作用 1. 静态资源服务器 功能:直接托管 HTML、CSS、JavaScript、图片等静态文…...
[Lc滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数
目录 1. 长度最小的字数组 题解 代码 ⭕2.无重复字符的最长子串 题解 代码 3.最大连续1的个数 III 题解 代码 4.将 x 减到 0 的最小操作数 题解 代码 1. 长度最小的字数组 题目链接:209.长度最小的字数组 题目分析: 给定一个含有 n 个 正整数 的数组…...
基于python的网络爬虫爬取天气数据及可视化分析(Matplotlib、sk-learn等,包括ppt,视频)
基于Python爬取天气数据信息与可视化分析(文末完整源码) 基于python的网络爬虫爬取天气数据及可视化分析 可以看看演示视频。 摘要 基于Python爬取天气数据信息与可视化分析 本论文旨在利用Python编程语言实现天气数据信息的爬取和可视化分析。天气…...
【缓存】缓存雪崩与缓存穿透:高并发系统的隐形杀手
缓存雪崩与缓存穿透:高并发系统的隐形杀手 在高并发系统中,缓存是提升性能的重要手段。然而,缓存使用不当也会带来一系列问题,其中最常见的就是缓存雪崩和缓存穿透。这两个问题如果不加以解决,可能会导致系统崩溃&…...
HTML AI 编程助手
HTML AI 编程助手 引言 随着人工智能技术的飞速发展,编程领域也迎来了新的变革。HTML,作为网页制作的基础语言,与AI技术的结合,为开发者带来了前所未有的便利。本文将探讨HTML AI编程助手的功能、应用场景以及如何利用它提高编程…...
李宏毅机器学习课程学习笔记04 | 浅谈机器学习-宝可梦、数码宝贝分类器
文章目录 案例:宝可梦、数码宝贝分类器第一步:需要定义一个含有未知数的function第二步:loss of a function如何Sample Training Examples > 如何抽样可以得到一个较好的结果如何权衡模型的复杂程度 Tradeoff of Model Complexity todo 这…...
AIGC(生成式AI)试用 26 -- 跟着清华教程学习 - DeepSeek与AI幻觉
目标:继续学习 个人理解: - AI幻觉:一本正经的胡说八道,你还觉得很道理,倾向于相信;事实不一致,指令(预期)与实际不一致:跑题 - 潜在风险:把AI带坏了;信息误…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_add_dump
ngx_conf_add_dump 定义在src\core\ngx_conf_file.c static ngx_int_t ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename) {off_t size;u_char *p;uint32_t hash;ngx_buf_t *buf;ngx_str_node_t *sn;ngx_conf_dump_t *cd;has…...
QEMU源码全解析 —— 内存虚拟化(23)
接前一篇文章:QEMU源码全解析 —— 内存虚拟化(22) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 QEMU内存管理模型...
【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...
TypeScript 类型声明
在 TypeScript 开发中简化类型声明,可以通过以下 7 种实用技巧 显著提升效率: 一、善用类型推断(30% 场景免声明) // ❌ 冗余写法 const user: { name: string; age: number } { name: Jack, age: 25 };// ✅ 自动推断ÿ…...
什么是电子铅封管理系统APP 有那些功能
电子铅封管理系统APP,简单来说,就是用手机App来管理和操作电子铅封的移动端软件。一、传统铅封 vs 电子铅封对比项传统铅封(塑料封/钢丝封)电子铅封防伪性易仿制,肉眼难辨真假全球唯一芯片ID,无法复制追溯能…...
Python数据库迁移实战:从SQLAlchemy到Alembic的完整指南
Python数据库迁移实战:从SQLAlchemy到Alembic的完整指南 引言 数据库迁移是后端开发中不可或缺的一部分。作为从Python转向Rust的后端开发者,我发现Python的数据库迁移工具非常成熟,尤其是Alembic配合SQLAlchemy的组合。本文将从实战角度出发…...
DeepSeek多集群联邦治理难题破局:用GitOps+ArgoCD+自定义CRD实现跨AZ/AWS/GCP统一管控——现在不看,下季度升级将强制启用
更多请点击: https://kaifayun.com 第一章:DeepSeek云原生架构设计 DeepSeek云原生架构以Kubernetes为核心调度平台,深度融合服务网格(Istio)、可观测性栈(Prometheus Grafana Loki)与GitOps…...
如何在3分钟内为Word添加专业APA第7版引用格式:终极指南
如何在3分钟内为Word添加专业APA第7版引用格式:终极指南 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 学术写作中,引用格式的…...
超全 PS 快捷键汇总!新手一键收藏终身受用
对于经常使用Photoshop修图、做设计的小伙伴来说,最影响效率的从来不是创意不足,而是频繁点击菜单栏找功能。明明几秒就能完成的操作,却因为不熟悉工具,反复查找按钮、低效操作,大大拖慢修图节奏。熟练掌握PS快捷键&am…...
Mythos模型的技术本质:执行态建模与终端状态感知
1. 这不是一次普通模型发布:Mythos背后的真实技术分水岭 “Claude Mythos Preview”这七个字,最近在安全圈和AI工程一线引发的震动,远超多数人最初预估。它不是又一个参数堆叠的“更大模型”,也不是一次常规的SOTA刷新——它是一次…...
红黑树(简易版)
一、一句话红黑树 ≈ 近似平衡的二叉查找树,保证查找 O(log n)二、5 条性质(背前 4 条即可) 节点是 红 / 黑根是 黑叶子(NIL)是 黑红节点的孩子必须是黑(不能连续红)任意节点到叶子的 黑高相同&…...
为什么选择Minimal:GitHub Pages最简洁主题的深度解析与快速入门指南
为什么选择Minimal:GitHub Pages最简洁主题的深度解析与快速入门指南 【免费下载链接】minimal Minimal is a Jekyll theme for GitHub Pages 项目地址: https://gitcode.com/gh_mirrors/mini/minimal Minimal主题是GitHub Pages平台上最受欢迎、最简洁的Jek…...
对比按次计费Taotoken的TokenPlan套餐为长期项目带来的成本变化
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比按次计费与Taotoken的TokenPlan套餐为长期项目带来的成本变化 在持续运营的AI项目中,成本的可预测性与可控性是团队…...
抖音批量下载工具:免费无水印下载完整指南
抖音批量下载工具:免费无水印下载完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量…...
