【数据结构】栈

news2025/7/9 9:06:21

1.啥是栈

2.栈的使用

3.栈的自定义实现

4.划分栈,虚拟机栈,栈帧概念

(1)首先咱们来介绍一下什么是栈

Stack就是栈:栈是一种元素先进后出的一种数据结构

你可以把它想象成羽毛球筒,这是最直观的了:你拿一个空的羽毛球筒,往里面放羽毛球,假设你放入3个羽毛球,当你想从里面取出一个羽毛球的时候,不就是取的是最后放进去的那个羽毛球吗?第一个放进去的羽毛球被压在了最底部,也是最后才能拿到的羽毛球~

如上图,我要放入1  2  3  4  5  6 这几个元素,我按顺序先放入1  放入  2  再放入  3,现在3就在栈顶,1在栈低,我要是想从栈里取元素,首先取到的栈顶元素,而我想取到1的话,就得把1上面的元素先全部取完才能取到1,这就是说栈是一种先进后出的数据结构,1先放进去了,那就最后才能取,3最后放进去的,那么3就优先被取到 ~

上述就是关于栈的概念介绍


(2)接下来看看怎么在java中去使用栈

(图片来源:比特高博)

上图给出了栈的方法

接下来用代码测试一下(讲解写在注释中)

    public static void main(String[] args) {
        //创建栈
        Stack<Integer> stack = new Stack<>();
        //往栈里插入元素
        stack.push(1);
        stack.push(21);
        stack.push(13);
        stack.push(15);
        //获取栈顶元素
        System.out.println(stack.peek());
        //弹出栈顶元素
        System.out.println(stack.pop());
        //再次获取栈顶元素
        System.out.println(stack.peek());
        //判断此时栈是否为空
        System.out.println(stack.empty());
        //接下来把栈中剩下的元素再全部弹出
        stack.pop();
        stack.pop();
        stack.pop();
        //再次判断栈此时是否为空
        System.out.println(stack.empty());
        
        //该方法不是栈的方法,而是父类方法
        System.out.println(stack.size());//stack继承了vector,有父类方法
    }

 

 注意两个方法

(1)peek():这个方法是查看当前的栈顶元素,返回值为栈的元素,这个只是看一下,并没有动元素

(2)pop():这个方法是弹出(删除)栈顶元素,返回值也是栈的元素,这个是不仅看,还把元素给删除了

然后还有最后那个size()方法,这个不是Stack自带的,而是它继承了vector,是父类的方法~


(3)自定义实现一个栈

栈的底层是一个数组,所以栈是顺序储存的

public class MyStack {
    public int[] elem;
    public int usedSize;

    public static final int DEFAULT_CAPACITY = 10;

    public MyStack(){
        elem = new int[DEFAULT_CAPACITY];
    }

    public void push(int val){
        if(isFull()){
            elem = Arrays.copyOf(elem,elem.length*2);
        }
        elem[usedSize] = val;
        usedSize++;

    }
    public boolean isFull(){
        if(elem.length == usedSize) {
            return true;
        }else {
            return false;
        }
    }

    //删除栈顶元素
    public int pop(){
        if(empty()){
            throw new emptyStackException("栈为空了");
        }
        int oldVal = elem[usedSize-1];
        usedSize--;
        return oldVal;
    }

    //判断是否为空
    public boolean empty(){
        return usedSize == 0;
    }

    public int peek(){
        if(empty()){
            throw new emptyStackException("栈为空了");
        }
        return elem[usedSize-1];
    }
}

(4)区分栈,虚拟机栈,栈帧

栈:一种先进后出的数据结构

虚拟机栈:一块JVM内存,定义的局部变量,方法的开辟都存再虚拟机栈上

栈帧:但是方法的开辟出来的这块内存叫做栈帧


以上就是栈的简单介绍~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

坑爹,线上同步近 3w 个用户导致链路阻塞引入发的线上问题,你经历过吗?

分享一个印象深刻的线上问题&#xff0c;希望能够给 xdm 带来一点思考 一个稀松平常的工作日&#xff0c;正准备下班的时候&#xff0c;不巧&#xff0c;突发线上紧急问题&#xff0c;心中一万个不情愿&#xff0c;可还是要硬着头皮去定位问题 简单的表象为微服务之间 gRPC通…

打造高安全数字基础设施:中国电子云服务关键行业的宣言

11月18日&#xff0c;主题为“至信铸云守正创新”的2022中国电子云峰会在北京举行。中国电子云在会上发布了其服务关键行业的价值主张、分布式云战略&#xff0c;实测了仓海CeaStor分布式存储的性能。中国电子党组书记、董事长曾毅&#xff0c;中国工程院院士沈昌祥&#xff0c…

制作电子签名

每天一个PS/PR小技巧&#xff08;原理实践&#xff09; 每天一个PS/PR小技巧&#xff08;原理实践&#xff09;_Dezeming的博客-CSDN博客PS是由Adobe Systems开发和发行的图像处理软件。本文的特色在于快速上手和制作一些生活中会常用的功能&#xff0c;并且解释这些功能的具体…

DJYGUI系列文章四:GK文本显示

目录 1 GK文本显示概述 1.1 ansi系 1.2 unicode系 1.3 DJYGUI文本显示 2 字符集说明 3 字符集API说明 3.1 ModuleInstall_Charset&#xff1a;字符编码模块初始化 ​​​​​​​3.2Charset_NlsInstallCharset&#xff1a;安装字符编码 ​​​​​​​3.3 Charset_NlsG…

1527_AURIX_TriCore内核架构开篇与架构概述

全部学习汇总&#xff1a; GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com) 看文档的时候&#xff0c;引用了内核架构的内容。这方面我没有看过&#xff0c;除了ARM也没有什么内核算是较为认真的看过。纵然是ARM&#xff0c;看…

锐捷MSTP实验配置

目录 Vlan基础配置 多生成树配置 查看生成树信息 MSTP其它特性配置 边缘端口 生成树保护特性 生成树时间特性 Vlan基础配置 SW1、SW2配置Vlan vlan range 10,20,40 int g0/0 switchport mode trunk switchport trunk allowed vlan add 10,2…

图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型

图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型 目录 图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型效果分析基本描述模型结构程序实现参考资料效果分析 基本描述 GCN-GRU 模型是用于动态网络数据中动态不确定意见预测的端到端可训练…

Linux多线程编程

文章目录1、线程基本知识2、线程控制3、线程同步与互斥<1>线程互斥<2>线程同步条件变量生产者消费者模型POSIX信号量读者写者问题<3>线程池<4>单例模式1、线程基本知识 线程概念 线程是在进程内部运行的一个执行分支(执行流)&#xff0c;属于进程的一部…

Vue2.0开发之——Vue基础用法-条件渲染指令(23)

一 概述 条件渲染指令—v-if和v-showv-elsev-else-if 二 条件渲染指令—v-if和v-show 2.1 条件渲染指令 条件渲染指令用来辅助开发者按需控制 DOM 的显示与隐藏。条件渲染指令有如下两个&#xff0c;分别是&#xff1a; v-ifv-show 2.2 示例 布局代码 <div id"a…

【考研复试】计算机专业考研复试英语常见问题五(兴趣爱好/实践经历篇)

相关链接&#xff1a; 【考研复试】计算机专业考研复试英语常见问题一&#xff08;家庭/家乡/学校篇&#xff09;【考研复试】计算机专业考研复试英语常见问题二&#xff08;研究方向/前沿技术/本科毕设篇&#xff09;【考研复试】计算机专业考研复试英语常见问题三&#xff0…

Redhat(10)-防火墙-文件管理-JINJA2模板-Cron-文件权限-NTP-autofs

1.防火墙 2.文件管理 3.JINJA2模板 4.Cron作业 5.文件权限 6.NTP 7.autofs 1.防火墙 网络过滤子系统-netfilter&#xff1a;修正、丢弃数据包。 firewalld是什么&#xff1f; 就是处理网卡来的数据包。 1.源地址被分配给特定区域&#xff0c;应用该区域的规则。 2.网卡…

PyQt5 QLineEdit

PyQt5 QLineEditQLineEdit常用方法及属性QLineEdit 实例1QLineEdit 实例2QLineEdit 实例3QLineEdit 综合示例QLineEdit常用方法及属性 QLineEdit 实例1 import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import *class MyLineEditWindo…

【VTK+有限元后处理】实时剖切视图

目的 实现后处理结果云图的平面剖切视图。 方法 通过使用vtkPlaneWidget控件交互&#xff0c;得到剖切平面&#xff0c;通过vtkClipDataSet完成对vtkUnstructuredGrid有限元结果数据的剖切操作。渲染管线如下图所示[1]^{[1]}[1]。 代码实现 首先&#xff0c;我们先写一个创…

【软考软件评测师】第二十八章 计算机网络(网络设备网络地址)

【软考软件评测师】第二十八章 计算机网络&#xff08;网络设备网络地址&#xff09; 第二十八章 计算机网络&#xff08;网络设备网络地址&#xff09;【软考软件评测师】第二十八章 计算机网络&#xff08;网络设备网络地址&#xff09;第一部分 知识点集锦1.IPv4地址1&#…

Maya 贴图链接检测重链打包插件tjh_lost_textures_finder 1.3.2 更新发布

经常遇到maya工程文件贴图丢失或是路径链接更改的问题&#xff0c;对于贴图师和渲染师来说&#xff0c;海量的贴图重连 贴图和查找丢失贴图都是繁重耗时的工作。自从tjh_lost_textures_finder插件诞生以来&#xff0c;就一直再做此项工作的优化工作。 V1.3.2最新版更新内容&am…

Python爬虫:scrapy从项目创建到部署可视化定时任务运行

目录前言第一节 基本功能1、使用 pyenv创建虚拟环境2、创建 scrapy项目3、创建爬虫第二节 部署爬虫4、启动 scrapyd5、使用 scrapyd-client 部署爬虫项目6、使用 spider-admin-pro管理爬虫第三节 部署优化7、使用 Gunicorn管理应用8、使用 supervisor管理进程9、使用 Nginx转发…

简单shell批量文件转换gbk转为utf8编码

前言 matlab打包成exe时发现中文乱码&#xff0c;查找发现是gbk编码问题,找半天没找到合适的批量转换编码工具&#xff0c;就搞了个简单的shell来实现 准备工作 windows上有安装git bash命令行的话可以直接跑sh脚本,没有的话下一个很快。linux可以直接运行 代码 #!/bin/sh…

Answering the SDIs Step by Step

title: Notes of System Design No.01 —Answering the SDIs Step by Step description: Answering the SDIs Step by Step ’ date: 2022-05-04 14:52:06 tags: 系统设计 categories: 系统设计 In this Article , I will give a introduction to the guildline of answerin…

实验33:RFID门禁卡实验

OK&#xff0c;本实验分为两个部分 一、读卡 二、显示不同的卡的信息&#xff0c;同时继电器动作 01 硬件电路设计 读卡ID&#xff0c;两张卡&#xff0c;白卡和蓝卡&#xff0c;用txt文件名称体现 lib里面是库文件 把它放在自己的Arduino相应的文件家里&#xff0c;最好是…

MySQL数据库 -- 内置函数

今天来一起学习MySQL数据库的内置函数。 目录 日期函数 current_date current_time current_timestamp date_add date_sub datediff 实例演示 创建一张表&#xff0c;记录生日 创建一个留言表 字符串函数 charset concat length replace substring ucase…