数据结构 (5)栈

一、基本概念

       栈是一种运算受限的线性表,它只允许在表的一端进行插入和删除操作,这一端被称为栈顶(Top),而另一端则被称为栈底(Bottom)。栈的插入操作被称为入栈(Push),删除操作被称为出栈(Pop)。栈具有后进先出(Last In First Out,LIFO)或先进后出(First In Last Out,FILO)的特性,即最后插入的元素会最先被删除。

二、抽象数据类型定义

       栈的抽象数据类型定义通常包括数据对象、数据关系以及基本操作。数据对象是栈中元素的集合,数据关系则定义了元素之间的顺序。栈的基本操作包括初始化、入栈、出栈、取栈顶元素以及判断栈是否为空等。

三、实现方式

  1. 数组实现:使用一组连续的内存空间来存储栈中的元素,并通过栈顶指针来指示栈顶元素的位置。入栈时,将新元素存储在栈顶指针的下一个位置,并更新栈顶指针;出栈时,将栈顶元素移动到栈顶指针的位置,并释放该空间,同时更新栈顶指针。数组实现的栈具有访问速度快、实现简单的优点,但存在空间利用率不高的问题,因为数组的大小在初始化时就已确定,当栈中元素数量超过数组大小时,需要进行扩容操作。
  2. 链表实现:使用一组节点来存储栈中的元素,每个节点包含一个数据域和一个指向下一个节点的指针。入栈时,将新元素添加到链表尾部,并更新栈顶指针;出栈时,将栈顶元素从链表中移除,并更新栈顶指针。链表实现的栈具有空间利用率高、可以动态增长或缩小的优点,但实现相对复杂一些。

四、基本操作及实现

  1. 初始化:创建一个空栈,并初始化栈顶指针和栈底指针。
  2. 入栈:将新元素添加到栈顶,并更新栈顶指针。
  3. 出栈:将栈顶元素移除,并更新栈顶指针。如果栈为空,则出栈操作失败。
  4. 取栈顶元素:返回栈顶元素的值,但不移除它。如果栈为空,则取栈顶元素操作失败。
  5. 判断栈是否为空:检查栈顶指针是否等于栈底指针,如果相等,则栈为空。

五、应用场景

  1. 函数调用:在函数调用过程中,系统会使用栈来保存函数的调用信息,如参数、局部变量和返回地址等。当函数执行完毕后,系统会从栈中弹出这些信息,以恢复调用函数的状态。
  2. 表达式求值:在表达式求值过程中,栈可以用来存储操作数和操作符。通过逆波兰表达式或中缀表达式求值算法,可以利用栈的后进先出特性来正确计算表达式的值。
  3. 深度优先搜索:在深度优先搜索算法中,栈可以用来存储待访问的节点。每次从栈顶取出一个节点进行访问,并将其相邻节点依次入栈。这样可以保证按照深度优先的顺序访问所有节点。
  4. 括号匹配:在检查字符串中的括号是否匹配时,可以使用栈来存储左边的括号。当遇到右边的括号时,从栈顶弹出一个元素进行匹配。如果栈为空或括号不匹配,则说明字符串中的括号不匹配。

 结语

不甘于平庸

还在为梦想奋斗

!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 在软件开发流程中的优势、挑战及应对策略

AI 在软件开发流程中的优势、挑战及应对策略 随着人工智能技术的飞速发展,AI大模型正在逐步渗透到软件开发的各个环节,从代码自动生成到智能测试,AI的应用正在重塑传统的软件开发流程。本篇文章将分析AI在软件开发流程中带来的优势&#xff0…

2025-2026财年美国CISA国际战略规划(下)

文章目录 前言四、加强综合网络防御(一)与合作伙伴共同实施网络防御,降低集体风险推动措施有效性衡量 (二)大规模推动标准和安全,以提高网络安全推动措施有效性衡量 (三)提高主要合作…

hubuctf-2024校赛-复现wp

web easyweb1 <?php error_reporting(0); highlight_file(__FILE__);$flag getenv("GZCTF_FLAG");if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("You are failed.");}if(intval($num)){echo $flag;} } 利…

[AutoSar]BSW_Diagnostic_007 BootLoader 跳转及APP OR boot response 实现

目录 关键词平台说明背景一、Process Jump to Bootloader二、相关函数和配置2.1 Dcm_GetProgConditions()2.2 Dcm_SetProgConditions() 三、如何实现在APP 还是BOOT 中对10 02服务响应3.1 配置3.2 code 四、报文五、小结 关键词 嵌入式、C语言、autosar、OS、BSW、UDS、diagno…

Linux命令思维导图

看到一个很不错的Linux命令思维导图&#xff0c;用机器翻译了一下&#xff0c;建议收藏备用。 附上英文版&#xff1a;

vmware esxi vcenter6.7安装教程(dell)以及许可证

背景 vSphere是数据中心产品附带的软件套件&#xff0c;vSphere就像是Microsoft Office套件一样&#xff0c;其中包含许多软件&#xff0c;例如PPT、Word、Excle等&#xff0c;同理&#xff0c;vSphere也是一个软件套装&#xff0c;其中包含vCenter、ESXi、vSphere Client等&a…

springboot实战(17)(“大事件“——新增文章主体逻辑)

目录 一、新增文章涉及的数据表、实体类。 &#xff08;1&#xff09;表结构。 &#xff08;2&#xff09;实体类&#xff08;Article&#xff09; 二、接口文档分析。 &#xff08;1&#xff09;请求方式与请求路径。 &#xff08;2&#xff09;请求参数。 &#xff08;3&…

Vue小项目(开发一个购物车)

基于Vue知识点1&#xff08;点击跳转&#xff09;、Vue知识点2&#xff08;点击跳转&#xff09; ​想要学习更多前端知识&#xff1a;点击Web前端专栏 接下来我们开发一个如下图所示&#xff0c;有最基本购物车功能的简易小项目 下面这是最基本的HTMLCSS框架&#xff01;&…

Vue.js 学习总结(16)—— 为什么 :deep、/deep/、>>> 样式能穿透到子组件

不使用 deep 要想修改三方组件样式&#xff0c;只能添加到 scoped 之外&#xff0c;弊端是污染了全局样式&#xff0c;后续可能出现样式冲突。 <style lang"less"> .container {.el-button {background: #777; } }使用 /deep/ deprecated .container1 {/deep…

禁用达梦DEM的agent

agent占用内存较多&#xff0c;实际没什么使用&#xff0c;考虑停止agent 应该切换到root执行停止 cd /dm/dmdbms/tool/dmagent/service/ ./DmAgentService stop禁用

多维高斯分布的信息熵和KL散度计算

多维高斯分布是一种特殊的多维随机分布&#xff0c;应用非常广泛&#xff0c;很多现实问题的原始特征分布都可以看作多维高斯分布。本文以数据特征服从多维高斯分布的多分类任务这一理想场景为例&#xff0c;从理论层面分析数据特征和分类问题难度的关系注意&#xff0c;本文分…

【ESP32CAM+Android+C#上位机】ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输

前言: 本项目实现ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输。本项目包含有ESP32源码(arduino)、Android手机APP源码以及C#上位机源码,本文对其工程项目的配置使用进行讲解。实战开发,亲测无误。 AP模式,就是ESP32发出一个WIFI/热点提供给电…

Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计

概述 Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计,探索 RISC-V Vector1.0 的前沿技术&#xff0c;选择嘉楠科技的 Canmv K230D Zero 开发板。这款创新的开发板是由嘉楠科技与香蕉派开源社区联合设计研发&#xff0c;搭载了先进的勘智 K230D 芯片。 K230…

RocketMQ: Producer与Consumer 最佳实践

Producer 1 &#xff09;发送消息注意事项 1.1 一个应用尽可能用一个 Topic&#xff0c;消息子类型用 tags 来标识&#xff0c;tags 可以由应用自由设置。只有发送消息设置了tags&#xff0c;消费方在订阅消息时&#xff0c;才可以利用 tags 在 broker 做消息过滤 message.setT…

MCGSMCGS昆仑通态触摸屏

MCGS昆仑通态触摸屏应用实例详解 1目录设置 本案例讲了两个窗口的互相调用 创建工程 首先创建一个新工程 打开软件 McgsPro组态软件 菜单栏&#xff1a;文件&#xff1a;新建工程 打开工程设置窗口 HMI配置中应该是对应的不同型号的触摸屏&#xff0c; 选择一个类型&#x…

低温存储开关机问题

问题&#xff1a; 某消费电子产品在进行可靠性实验室&#xff0c;在低温-30C存储两个小时后&#xff0c;上电不开机。在常温25C时&#xff0c;开关机正常。 分析&#xff1a; 1、接串口抓log信息&#xff0c;从打印信息可以看出uboot可以起来&#xff0c;在跑kernel时&#x…

【JavaEE进阶】 JavaScript

本节⽬标 了解什么是JavaScript, 学习JavaScript的常⻅操作, 以及使⽤JQuery完成简单的⻚⾯元素操作. 一. 初识 JavaScript 1.JavaScript 是什么 JavaScript (简称 JS), 是⼀个脚本语⾔, 解释型或即时编译型的编程语⾔. 虽然它是作为开发Web⻚⾯的脚本语⾔⽽出名&#xff0c;…

蓝桥杯每日真题 - 第23天

题目&#xff1a;&#xff08;直线&#xff09; 题目描述&#xff08;12届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目理解: 在平面直角坐标系中&#xff0c;从给定的点集中确定唯一的直线。 两点确定一条直线&#xff0c;判断两条直线是否相同&#xff0c;可通过…

战略思维:破解复杂世界的系统性智慧

在当今快速演变且错综复杂的时代背景下&#xff0c;战略思维已然成为个人、组织乃至国家在应对挑战和实现目标过程中的核心能力。它不仅是一种思考模式&#xff0c;更是一套系统且富有智慧的工具&#xff0c;助力我们在混沌的环境中精准定位方向、敏锐捕捉机遇。 一、目…

html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转

效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图片预览</title><sty…