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

栈(Stack)

目录

1.1 概念

 1.2 栈的使用

 1.3 栈的模拟实现

1.4 栈的应用场景

1. 改变元素的序列

2. 将递归转化为循环


1.1 概念

:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFOLast In First Out)的原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶
出栈:栈的删除操作叫做出栈。出数据在栈顶

栈在现实生活中的例子:

 

 

 1.2 栈的使用

public static void main(String[] args) {Stack<Integer> s = new Stack();s.push(1);s.push(2);s.push(3);s.push(4);System.out.println(s.size()); // 获取栈中有效元素个数---> 4System.out.println(s.peek()); // 获取栈顶元素---> 4s.pop(); // 4出栈,栈中剩余1 2 3,栈顶元素为3System.out.println(s.pop()); // 3出栈,栈中剩余1 2 栈顶元素为3if(s.empty()){System.out.println("栈空");}else{System.out.println(s.size());}
}

 1.3 栈的模拟实现

从上图中可以看到,Stack继承了VectorVectorArrayList类似,都是动态的顺序表,不同的是Vector是线程安全的。

 

public class MyStack {int[] array;int size;public MyStack(){array = new int[3];}public int push(int e){ensureCapacity();array[size++] = e;return e;}public int pop(){int e = peek();size--;return e;}public int peek(){if(empty()){throw new RuntimeException("栈为空,无法获取栈顶元素");}return array[size-1];}public int size(){return size;}public boolean empty(){return 0 == size;}private void ensureCapacity(){if(size == array.length){array = Arrays.copyOf(array, size*2);}}
}

1.4 栈的应用场景

1. 改变元素的序列

1. 若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的一个出栈序列是()
A: 1,4,3,2 B: 2,3,4,1 C: 3,1,4,2 D: 3,4,2,1
2.一个栈的初始状态为空。现将元素12345ABCDE依次入栈,然后再依次出栈,则元素出栈的顺序是()。
A: 12345ABCDE B: EDCBA54321 C: ABCDE12345 D: 54321EDCBA

2. 将递归转化为循环

        比如:逆序打印链表

// 递归方式
void printList(Node head){if(null != head){printList(head.next);System.out.print(head.val + " ");}
}
// 循环方式
void printList(Node head){if(null == head){return;}Stack<Node> s = new Stack<>();// 将链表中的结点保存在栈中Node cur = head;while(null != cur){s.push(cur);cur = cur.next;}// 将栈中的元素出栈while(!s.empty()){System.out.print(s.pop().val + " ");}
}

相关文章:

栈(Stack)

目录 1.1 概念 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的应用场景 1. 改变元素的序列 2. 将递归转化为循环 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为…...

【计算机网络】2、网络编程模型理论

文章目录一、网络基本概念1.1 网段1.2 子网掩码 netmask1.3 子网 subnet1.4 网络地址 network1.5 实战 192.168.0.1/27 的含义二、socket2.1 sockaddr 格式2.1.1 IPv4 sockaddr 格式2.1.2 IPv6 sockaddr 格式2.1.3 本地 sockaddr 格式2.2 http 与 websocket三、TCP 编程3.1 ser…...

jmeter接口测试及详细步骤以及项目实战教程

如果看完这篇文章还是不太明白的话&#xff0c;可以看看下面这个视频 2023年B站最新Jmeter接口测试实战教程&#xff0c;精通接口自动化测试只需要这一套视频_哔哩哔哩_bilibili2023年B站最新Jmeter接口测试实战教程&#xff0c;精通接口自动化测试只需要这一套视频共计16条视…...

抖音进攻,B站退守

“爱优腾芒”等长视频平台的崛起&#xff0c;在一定层面上丰富了人们的日常生活&#xff0c;而抖音、快手等短视频平台的出现&#xff0c;则在很大程度上改变了用户观看视频的方式。只不过&#xff0c;近几年&#xff0c;随着流量增长逐渐遭遇瓶颈&#xff0c;各视频平台便纷纷…...

2022国赛E题完整成品文章数据代码模型--小批量物料的生产安排

基于LSTM循环神经网络的小批量物料生产安排分析 摘要 某电子产品制造企业面临以下问题&#xff1a;在多品种小批量的物料生产中&#xff0c;事先无法知道物料的 实际需求量。企业希望运用数学方法&#xff0c;分析已有的历史数据&#xff0c;建立数学模型&#xff0c;帮助企业…...

学生党,快来 Azure 一起学习 OpenAI (一):注册 Azure 和申请 OpenAI

大家好我是微软学生大使 Jambo , 在刚结束的微软学生开发者峰会 2023中我们了解到微软为学生提供了 Azure for Student 大礼包&#xff0c;通过 Azure for Student 除了学习和部署云原生的应用外&#xff0c;还可以申请使用 Microsoft OpenAI Service 。在这个 AIGC 火热的年代…...

深入理解【正则化的L1-lasso回归和L2-岭回归】以及相关代码复现

正则化--L1-lasso回归和L2-岭回归1- 过拟合 欠拟合 模型选择2- 正则L1与L23- L2正则代码复现3-1 底层逻辑实现3-2 简洁实现1- 过拟合 欠拟合 模型选择 1-1 欠拟合&#xff1a; 在训练集和测试集上都不能很好的拟合数据【模型过于简单】 原因&#xff1a; 学习到的数据特征过少 …...

入侵检测——如何实现反弹shell检测?

反弹shell的本质&#xff1a;就是控制端监听在某TCP/UDP端口&#xff0c;被控端发起请求到该端口&#xff0c;并将其命令行的输入输出转到控制端。reverse shell与telnet&#xff0c;ssh等标准shell对应&#xff0c;本质上是网络概念的客户端与服务端的角色反转。 反弹shell的结…...

Python常用语句学习

人生苦短&#xff0c;我用Python。 ——吉多范罗苏姆 文章目录前言一、判断语句&#xff08;一&#xff09;if语句1. 作用2. 构成3. 语法4. 样例5.说明&#xff08;二&#xff09;if嵌套二、循环语句&#xff08;一&#xff09;while循环1. 作用2. 语法3. 样例4. 说明&#xff…...

测试3年还不如应届生,领导一句点醒:“公司不是只雇你来点点点的”

你的身边&#xff0c;是否有这样的景象&#xff1f; A&#xff1a;写了几年代码&#xff0c;写不下去了&#xff0c;听说测试很好上手&#xff0c;先来做几年测试 。 B&#xff1a;小文员一枚&#xff0c;想入行 IT&#xff0c;听说测试入门简单&#xff0c;请问怎么入行 。 …...

华为网络设备之路由策略,前缀列表(使用,规则)

华为网络之路由策略 前言&#xff1a;在企业网络的设备通信中&#xff0c;常面临一些非法流量访问的安全性及流量路径不优等问题&#xff0c;故为保证数据访问的安全性、提高链路带宽利用率&#xff0c;就需要对网络中的流量行为进行控制&#xff0c;如控制网络流量可达性、调…...

白噪音简介与实现

一、简介&#xff1a; 白噪音&#xff08;White Noise&#xff09;是一种具有平均功率频谱密度的噪音信号&#xff0c;其功率在所有频率上均匀分布。白噪音是一种随机信号&#xff0c;其包含所有频率成分的等幅随机振荡。因此&#xff0c;白噪音看起来像是一种随机的“嘈杂声”…...

Springboot结合线程池的使用

1.使用配置文件配置线程的参数 配置文件 thread-pool:core-size: 100max-size: 100keep-alive-seconds: 60queue-capacity: 1配置类 Component ConfigurationProperties("thread-pool") Data public class ThreadPoolConfig {private int coreSize;private int ma…...

AOP工作流程

AOP工作流程3&#xff0c;AOP工作流程3.1 AOP工作流程流程1:Spring容器启动流程2:读取所有切面配置中的切入点流程3:初始化bean流程4:获取bean执行方法验证容器中是否为代理对象验证思路步骤1:修改App类,获取类的类型步骤2:修改MyAdvice类&#xff0c;不增强步骤3:运行程序步骤…...

Modbus相关知识点及问题总结

本人水平有限&#xff0c;写得不对的地方望指正 困惑&#xff1a;线圈状态的值是否是存储在线圈寄存器里面&#xff1f;是否有线圈寄存器的说法&#xff1f;网上有说法说是寄存器占两个字节&#xff0c;但线圈的最少操作单位是位。类似于继电器的通断状态&#xff0c;直接根据电…...

【MySQL】函数

文章目录1. DQL执行顺序2. 函数2.1 字符串函数2.2 数值函数2.3 日期函数2.4 流程函数2.5 窗口函数2.5.1 介绍2.5.2 聚合窗口函数2.5.3 排名窗口函数2.5.4 取值窗口函数1. DQL执行顺序 2. 函数 2.1 字符串函数 函数功能concat(s1,s2,…sn)字符串拼接&#xff0c;将s1,s2…sn拼…...

MySQL高级

一、基础环境搭建 环境准备&#xff1a;CentOS7.6&#xff08;系统内核要求是3.10以上的&#xff09;、FinalShell 1. 安装Docker 帮助文档 : https://docs.docker.com/ 1、查看系统内核&#xff08;系统内核要求是3.10以上的&#xff09; uname -r2、如果之前安装过旧版本的D…...

带你弄明白c++的4种类型转换

目录 C语言中的类型转换 C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast RTTI 常见面试题 这篇博客主要是帮助大家了解和学会使用C中规定的四种类型转换。首先我们先回顾一下C语言中的类型转换。 C语言中的类型转换 在C语言中&#xff0c;如果赋…...

8个明显可以提升数据处理效率的 Python 神库

在进行数据科学时&#xff0c;可能会浪费大量时间编码并等待计算机运行某些东西。所以我选择了一些 Python 库&#xff0c;可以帮助你节省宝贵的时间 文章目录1、Optuna技术提升2、ITMO\_FS3、Shap-hypetune4、PyCaret5、floWeaver6、Gradio7、Terality8、Torch-Handle1、Optun…...

互联网公司吐槽养不起程序员,IT岗位的工资真是虚高有泡沫了?

说实话&#xff0c;看到这个话题的时候又被震惊到。 因为相比以往&#xff0c;程序员工资近年来已经够被压缩的了好嘛&#xff1f; 那些鼓吹泡沫论的&#xff0c;真就“何不食肉糜”了~~~ 而且这种逻辑就很奇怪&#xff0c; 程序员的薪资难道不是由行业水平决定么&#xff…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

6.9本日总结

一、英语 复习默写list11list18&#xff0c;订正07年第3篇阅读 二、数学 学习线代第一讲&#xff0c;写15讲课后题 三、408 学习计组第二章&#xff0c;写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语&#xff1a;复习l默写sit12list17&#…...

uniapp获取当前位置和经纬度信息

1.1. 获取当前位置和经纬度信息&#xff08;需要配置高的SDK&#xff09; 调用uni-app官方API中的uni.chooseLocation()&#xff0c;即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...

更新 Docker 容器中的某一个文件

&#x1f504; 如何更新 Docker 容器中的某一个文件 以下是几种在 Docker 中更新单个文件的常用方法&#xff0c;适用于不同场景。 ✅ 方法一&#xff1a;使用 docker cp 拷贝文件到容器中&#xff08;最简单&#xff09; &#x1f9f0; 命令格式&#xff1a; docker cp <…...