《java数据结构》--栈的详解

一.栈的认识

栈是一种不同于链表和顺序表的储存数据结构,它对存储数据和取出数据有着特殊的要求🤔。

首先栈只能从一端存储数据,也就是从一端进,还从这一端出这也是栈最大的特点,这也导致在栈中存取数据都必须遵循先进后出的原则😊,即先存入的数据只能最后拿出来,嗯🤔你可以把它想做一个细长的圆桶,你要往里放东西肯定是先放在最下面,当放满这个圆桶后你要再拿出刚开始放的那个,就必须把它上面的东西都拿出来才行。下面我来画图演示一下(画的不好请见谅🦊):

一般我们将栈用来存取的一端叫做栈顶,我们常常说取栈顶元素就是去取离栈顶最近的元素(也就是图中的3),另一端叫做栈底,向栈中存储数据叫做压栈,取出数据叫做出栈。

🐱以上就是关于栈的基本概念,接下来我们来自己实现一个栈,并进行增删查改😊。

二.栈的手动实现

因为栈不像顺序表和链表,可以随便访问到任意一个位置的数据,栈只能对栈顶元素进行操作并且遵循先进后出原则。那具体怎么操作呢🧐,接着看😉。

1.创建栈🐱

栈可以用数组来实现也可以用链表来实现

数组栈:用数组实现比较方便,而且再尾部插入和删除的代价小时间复杂度为O(1),且没有其他额外开销。这种实现方式适合于栈的常见操作,如进栈和出栈,因为这些操作在数组的尾部进行,效率较高。然而,数组的缺点是大小固定,需要预先分配足够的空间,且在栈满时无法动态扩展。

链表栈:可以灵活地添加或删除元素,无需预先分配固定大小的存储空间。链表栈通过维护一个指向栈顶元素的引用(头插,头删),可以实现快速的进栈和出栈操作。然而,链表在实现栈时,每个元素都需要额外的空间来存储指向下一个元素的引用,这可能导致空间上的开销。

具体使用哪种更据具体需要😊

博主这里使用数组来实现栈😊

2.判断是否压满🐱

方法和顺序表一样直接判断数组长度和栈内元素数量是否相同

3.压栈🐱

压栈的操作其实很容易实现首先还是和顺序表一样先判断是否扩容,然后直接在最后插入一个数据即可😉

4.出栈🐱

博主这里设定如果栈为空就抛出一个错误

出栈操作依然简单😸,让数据容量减一,然后返回栈顶元素就行😼

5.获取栈顶元素🐱

到这里你应该已经可以自己完成这个操作了吧😸,试着自己操作一下吧,实现方法和出栈类似。

6.获取长度和判空🐱

7.打印栈的元素🐱

到这里我们栈的内容就聊完了😋,如果你有什么不懂得地方或者其他见解,欢迎在下方评论或者私信博主,最后也希望可以多多支持一下博主🥰🥰!!!下一篇我们来聊一聊队列😸🙉

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

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

相关文章

FreeRtos进阶——队列的特殊用途

信号量与互斥量都一样,都是特殊的队列。但是只有互斥量实现了优先级继承机制。 信号量与互斥量与队列一样,在操作增加或者减少时,必须先关中断在进行操作! 信号量创建揭秘 图中信号量的创建过程,在代码中的体现本质就是…

vue+antd实践:在输入框光标处插入内容

今天来看一个很简单的需求。 需求描述:在输入框光标处,插入指定的内容。 效果如下: 实现思路:刚开始还在想怎么获取光标的位置,但是发现所做的项目是基于vue3antd组件,那么不简单了嘛,只要调…

SwiftUI初探

SwiftUI 虽然出现了好几年(1.0好像2019年出的,还有SPM也是同一年),现在已经到从1.0到5.0,但受限于对系统的要求(最低iOS13.0,有的要求17.0及以上),每个版本里面差异也很大,语法和Flutter 的Dart 比较像。空闲之余可以先…

Design and implementation of robot impedance controller

机器人阻抗控制器的设计与实现是一个复杂但关键的过程,它涉及到多个方面以确保机器人能够在外界环境的影响下保持稳定的性能。以下是对机器人阻抗控制器设计与实现的详细解答: 一、阻抗控制原理 阻抗控制的基本原理是建立一个期望的机器人位置和接触力…

HTML用法介绍

文章目录 一、HTML概念和模版二、常用标签及用法1.p标签2.span标签3.h标签4.hr标签5.img标签6.a标签7.input标签8.table标签 一、HTML概念和模版 HTML的全称为超文本标记语言&#xff0c;它包括一系列标签组成&#xff0c;模版及各部分注释如下&#xff1a; <!--声明文档类…

iptables练习题

目录 练习题1. 显示当前的iptables规则2. 允许所有来自192.168.1.0/24的TCP流量到本机的22端口&#xff08;SSH&#xff09;3. 禁止所有来自10.0.0.0/8的ICMP流量4. 允许所有出站流量5. 拒绝所有来自外部的HTTP流量&#xff08;80端口&#xff0c;tcp协议&#xff09;6. 删除IN…

设计模式19——观察者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 观察者模式&#xff08;Observ…

利用cherry pick巧妙地将某次提交单独合并到其他分支

0. 引言 最近在进行系统的多版本并行开发&#xff0c;涉及一些共有基础功能提交时就遇到了麻烦&#xff0c;一份代码需要向多个版本分支进行同步&#xff0c;以保证多版本都能有更新该基础功能。 多次对比提交的方式显然会带来巨大的工作量。但实际上我们可以通过git的cherry…

同时安装python2 和python3

最近的项目因为工具的原因 需要同时安装python2 和python3 我又想学着使用python 写东西 导致遇到了很多问题 记录下来 1 同时安装 python2 和python 1.1 安装完把/确认 Path 环境变量里 同时有python2,python2\Scripts和python3 ,python3\Scripts四个环境变量 修改python3…

IT人的拖延——渴望成功与害怕成功的矛盾

很多人都以为&#xff0c;害怕失败是拖延的主要诱因&#xff0c;但其实“害怕成功”也是拖延的主要诱因之一。要说这个原因&#xff0c;我们不得不提起Bible中的一个人“约拿”&#xff0c;让我们先来看看他的故事带给我们什么启示。 约拿情结简介 约拿是Bible中的一名先知&a…

hexo静态博客 部署到xxx.github.io github 静态页

hexo安装 npm install hexo-cli -g hexo init blog cd blog npm install hexo server key配置 ssh-keygen -t ed25519 -C “emaile.com” 添加key到github err gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository. 配置GitHub仓…

go select

select 是与 switch 相似的控制结构&#xff0c;与 switch 不同的是&#xff0c;select 中虽然也有多个 case&#xff0c;但是这些 case 中的表达式必须都是 channel 的收发操作。 select 能够让 goroutine 同时等待多个 channel 可读或者可写&#xff0c;在多个 channel 状态改…

【Python】 用Python的Pandas库美化打印Series和DataFrame

基本原理 在Python的数据分析领域&#xff0c;Pandas是一个非常重要的库。它提供了丰富的数据结构和数据分析工具&#xff0c;使得处理大型数据集变得简单高效。当你使用Pandas处理数据时&#xff0c;经常需要查看数据的预览&#xff0c;这时候美化打印&#xff08;Pretty-pri…

5、xss-labs之level6

一、level6-----大小写绕过 1、测试分析 测试了之前用过的payload&#xff0c;发现都不行&#xff0c;并且level4使用的Java伪协议也不行&#xff0c;可以得出<>、script、onclick都被过滤 2、构造payload 因为href被过滤&#xff0c;可以试一下大写HREF 初试payload…

Android应用开发之AndroidManifest.xml

一.AndroidManifest.xml介绍 1.定义 AndroidManifest官方解释是应用清单&#xff08;manifest意思是货单&#xff09;&#xff0c;每个应用的根目录中都必须包含一个&#xff0c;并且文件名必须一模一样。 它是Android程序的全局配置文件&#xff0c;是每个 android程序中必须…

linux 定时执行shell、python脚本

在linux里设置定时执行一般是用crontab&#xff0c;如果没有的话&#xff0c;可以先安装&#xff1a; 安装 查看是否安装 cron -v # 对于基于Debian的系统&#xff08;如Ubuntu&#xff09; sudo apt-get install cron# 对于基于RedHat的系统&#xff08;如CentOS&#xff…

selenium学习笔记

什么是selenium 比较官方的解释 Selenium是一个自动化测试工具&#xff0c;用于在Web应用程序中模拟用户操作。它提供了一组API&#xff0c;可以通过编程方式控制浏览器&#xff0c;并模拟用户的交互行为&#xff0c;例如点击、输入文本和导航等。Selenium支持多种编程语言&a…

论文阅读 - TIME-LLM: TIME SERIES FORECASTING BY REPROGRAMMING LARGE LANGUAGE MODELS

论文链接&#xff1a; https://arxiv.org/abs/2310.01728 目录 摘要 1 INTRODUCTION 2 RELATED WORK 3 METHODOLOGY 3.1 MODEL STRUCTURE 4 MAIN RESULTS 4.1 长期预测 4.2 短期预测 4.3 FEW-SHOT FORECASTING 5 CONCLUSION AND FUTURE WORK 摘要 动机&#xff1a; 时…

黎加厚教授:生成式人工智能对课程教材教法的影响

01 生成式人工智能与过去的信息技术有哪些不一样的地方 2023年&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;犹如百年惊雷&#xff0c;改变了我对计算机的认识。最先让我折服的是AI绘画&#xff0c;我只需要把心中想象的场景用提示词详细描述&#xff0c;立刻就生…

VS code 无法go to以及全局搜索不到问题

一、无法goto问题 需要安装插件C/C。 安装完成后&#xff0c;检查设置是否生效。步骤如下&#xff1a; 1. 点开设置&#xff1a; 2. 搜索c/c查找引擎&#xff0c;确认其为默认值&#xff0c;即可。 二、全局搜索不到 VS code有时候全局搜索内容&#xff0c;搜索不到或者搜索…