Stack 栈的实现与应用

news2024/9/29 3:25:12

目录

1. 概念

2. 常用的栈的方法

2.1 方法

2.2 代码

3. 自己实现栈

3.1 构造MyStack

3.2 push()

3.3 ensureCapacity()

3.4 pop()

3.5 peek()

3.6 empty()

3.7 szie()

4. 栈的应用


1. 概念

        

栈(Stack)是一种数据结构,是一种特殊的线性表,它是按照后进先出(Last-In-First-Out, LIFO)原则工作的线性数据结构。栈中的插入和删除元素的操作只能在栈顶进行,因此栈也被称为“后进先出表”。栈可以用数组或链表实现。

栈最基本的操作是:入栈(Push)、出栈(Pop)和获取栈顶元素(Top)。其中,入栈操作将元素放到栈顶,出栈操作将栈顶元素移除并返回其值,获取栈顶元素则是获取栈顶元素的值但是不移除栈顶元素。

另外,栈还有一些其他的常用操作,如:判断栈是否为空(IsEmpty)、获取栈中元素的个数(Size)、清空栈中的所有元素(Clear)等。

2. 常用的栈的方法

2.1 方法

方法

功能
push()在栈顶插入元素
pop()删除栈顶元素,并返回该元素的值。如果栈为空,则抛出EmptyStackException异常
peek()返回该元素的值。如果栈为空,则抛出EmptyStackException异常
empty()如果栈为空返回true,或者返回false
size()

返回栈内元素个数

2.2 代码

public static void main(String[] args) {
        Stack<Character> stack = new Stack<>();
        //插入A B C
        stack.push('A');
        stack.push('B');
        stack.push('C');
        System.out.println(stack.size());//获得栈中元素个数,打印   3
        System.out.println(stack.pop());//删除并获得栈顶元素 C
        System.out.println(stack.pop());//删除并获得栈顶元素 B
        stack.push('D');//栈顶插入D
        System.out.println(stack.empty());
}

注意:

  • 方法push(),pop(),peek()都是在栈顶执行插入,删除以及检索操作。isEmpty()和size()是标准的集合方法。
  • 栈顶操作的pop(),peek()的执行条件是栈不为空。

3. 自己实现栈

3.1 构造MyStack

Stack是动态顺序表,可以使用数组来实现,则我们需要创建一个数组,还可以用一个创建一个变量记录栈内元素大小。

public class MyStack {
    public int[] elem;
    public int size = 0;
    public MyStack(){
        elem = new int[10];
    }
    //...
}

3.2 push()

先进行判断栈的容量大小是否足够,不够进行栈的扩容,在进行压栈,反之,直接压栈,并将记录栈的大小的size加1;

    //入栈、压栈
    public void push(int val){
        if(size == elem.length){
            ensureCapacity();
        }
        elem[size] = val;
        size++;
    }

3.3 ensureCapacity()

栈中的元素个数不小于容量时,要对容量进行扩容,就是将栈中的元素克隆到更大的数组中。

private void ensureCapacity() {
        elem = Arrays.copyOf(elem,2 * elem.length);
}

3.4 pop()

出栈的时候要进行判断栈是否为空,如果栈为空,抛出EmptyStackException异常,反之,将栈顶元素删除并抛出,记录栈元素大小的size 减1;

    public int pop(){
        if(size == 0 ){
            throw new EmptyStackException();
        }
        return elem[--size];
    }

3.5 peek()

只需要把栈顶元素返回,要进行判断栈是否为空,如果栈为空,抛出EmptyStackException异常。

    //获得栈顶
    public int peek(){
        if(size == 0){
            throw new EmptyStackException();
        }
        int key = size - 1;
        return elem[key];
    }

3.6 empty()

判断size大小,szie = 0; 则返回true,反之false;

    //检查栈是否为空
    public boolean empty(){
        return size == 0;
    }

3.7 szie()

直接返回size大小;

    //栈内元素的个数
    public int size(){
        return size;
    }

4. 栈的应用

  1. 改变元素的序列
  2. 将递归转化为循环
  3. 括号匹配
  4. 逆波兰表达式求值
  5. 最小栈

这些都是较重要的应用,篇幅较大,我就放在了下篇博客,喜欢的可以点我主页查看。

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

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

相关文章

02_stack栈

1. Stack 栈是什么&#xff1f; 栈也叫栈内存&#xff0c;主管Java程序的运行&#xff0c;是在线程创建时创建&#xff0c;它的生命期是跟随线程的生命期&#xff0c;线程结束栈内存也就释放&#xff0c;对于栈来说不存在垃圾回收问题&#xff0c;只要线程一结束该栈就Over&…

LabVIEWCompactRIO 开发指南37 在第三方模拟器中执行

LabVIEWCompactRIO 开发指南37 在第三方模拟器中执行 如果需要验证时序和功能&#xff0c;在将LabVIEW FPGA VI编译到硬件之前&#xff0c;可以与三款第三方仿真器进行交互&#xff1a;MentorGraphicsModelSim&#xff08;LabVIEW2013及更早版本&#xff09;、MentorGraphics…

【MySQL】MySQL主从同步延迟原因与解决方案

文章目录 一、MySQL数据库主从同步延迟产生的原因二、关于DDL和DML三、主从延时排查方法四、解决方案3.1 解决从库复制延迟的问题&#xff1a;3.2 MySql数据库从库同步其他问题及解决方案 一、MySQL数据库主从同步延迟产生的原因 MySQL的主从复制都是单线程的操作&#xff0c;…

JS CSS 关于 Shadow dom 的用法

一、什么是 Shadow DOM 你是否好奇过&#xff0c;浏览器自带的元素的样式是如何实现的&#xff0c;例如 video、input &#xff0c;又或者在某些网站中看到一些非浏览器自带且没见过的元素&#xff1f; 如果你打开 F12 查看定位该元素的信息&#xff0c;你会发现啥都没看到&am…

Spring Cloud Alibaba 完整使用及与各中间件集成

目录 前言 官方中文文档 使用版本 spring 中间件 使用到的组件与功能 环境安装 虚拟机 nexus nacos 集成过程 工程搭建 父工程搭建 子工程 服务集成 nacos 配置文件&#xff1a; 服务注册与发现-discovery 服务注册 启动 服务发现 测试 配置管理-config…

网络安全是一个好专业吗?

前言 网络安全作为一个专业领域&#xff0c;在当今数字时代正变得越发重要和关键。无论是企业还是个人&#xff0c;面对着越来越频繁的网络威胁和攻击&#xff0c;网络安全领域的专业人员扮演着至关重要的角色。那么&#xff0c;从一个资深网安工程师的角度来看&#xff0c;网…

nest context.switchToHttp().getRequest() 获取不到user

把你该死的Public注释掉&#xff0c;这玩意开了后不走JWT验证token&#xff0c;所以拿不到那该死的user。

pdf怎么合并在一起?软件操作更高效

PDF格式已经成为了许多文档和表格的首选格式。然而&#xff0c;当你需要合并多个PDF文件时&#xff0c;可能会遇到一些麻烦&#xff0c;在本篇文章中&#xff0c;我们将向您介绍一种简单易用的方法来合并PDF文件。 以下是可以用来合并PDF文件的软件&#xff1a; - PDF转换器&a…

当你在浏览器中输入 URL 时会发生什么?

下面的图解说明了步骤。 1.Bob 在浏览器中输入 URL 并按下 Enter。在这个例子中&#xff0c;URL 由 4 部分组成&#xff1a; &#x1f539; 协议 - http://. 这告诉浏览器使用 HTTP 发送连接到服务器。 &#x1f539; 域名 - example.com. 这是站点的域名。 &#x1f539; 路径…

C++STL— priority_queue的使用与模拟实现

priority_queue的使用 priority_queue的介绍 优先级队列默认使用vector作为其底层存储数据的容器&#xff0c;在vector上又使用了堆算法将vector中的元素构造成堆的结构&#xff0c;因此priority_queue就是堆&#xff0c;所有需要用到堆的位置&#xff0c;都可以考虑使用prio…

极米十年巅峰之作极米Z7X,能带走的百吋大屏

近年来&#xff0c;随着人们娱乐消费的升级&#xff0c;家用投影仪消费市场不断扩大&#xff0c;增长速度也非常可观。据IDC最新发布的数据显示&#xff0c;2022年中国投影机市场总出货量505万台&#xff0c;同比增长7.4%。其中&#xff0c;智能投影机市场&#xff08;搭载有OS…

ChatGPT:免费可用 ChatGPT 网页版(免登录、免注册、不限制使用次数)

一、什么是chatgpt ChatGPT是一种基于GPT-3(Generative Pre-trained Transformer 3)的聊天机器人。GPT-3是由OpenAI公司开发的自然语言处理模型&#xff0c;具有非常强的语言理解和生成能力。 ChatGPT使用了GPT-3的预训练模型&#xff0c;在此基础上进行了微调和优化&#xf…

机器学习:基于Apriori算法对中医病症辩证关联规则分析

系列文章目录 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&#x1f4d2;关注…

【Linux】进程间通信的有关基础概念

在以前我们使用多进程时&#xff0c;我们一般都是让父子进程分别执行各自的代码&#xff0c;进程之间几乎没有通信&#xff0c;但是实际过程中&#xff0c;进程间的通信是十分重要的的一件事情&#xff0c;一个复杂的程序一般都是有多个进程相互通信&#xff0c;协调进行来完成…

重磅发布 |《2023年消费品企业数字化转型调研白皮书》

数字经济时代&#xff0c;数字化转型对于消费品企业越来越重要&#xff0c;已成为消费品企业增加经济效益、提升竞争力的重要策略之一。随着数字化转型进入深水区&#xff0c;越来越多涉及到商业模式、业务模式和产业链生态的创新变革开始出现&#xff0c;给消费品企业带来了一…

【UE】windows包蓝图分辨率设置

【UE】windows包蓝图分辨率设置 屏幕模式&#xff08;SetFullscreenMode&#xff09; 模式说明全屏可以任意修改分辨率的全屏窗口化全屏适配显示器分辨率的全屏窗口化窗口化 分辨率修改方法(SetScreenResolution) 控制台修改分辨率方法(ExecuteConsoleCommand) 命令 &#xf…

股票量化分析工具QTYX使用攻略——挖掘主升浪中的人气个股(更新2.6.5)

搭建自己的量化系统 如果要长期在市场中立于不败之地&#xff01;必须要形成一套自己的交易系统。 行情不等人&#xff01;边学习边实战&#xff0c;在实战中学习才是最有效地方式。于是我们分享一个即可以用于学习&#xff0c;也可以用于实战炒股分析的量化系统——QTYX。 QTY…

如何有效运用测评自养号来提升阿里国际店铺权重

在阿里国际平台上提升销售并非易事&#xff0c;但是借助强大的营销策略和有效的自养号技术&#xff0c;你可以大幅度提升你的店铺销量。以下是一些具体的步骤和技巧。 1. 数据分析和市场调研 首先&#xff0c;要了解你的目标客户群体和市场趋势。分析你的销售数据&#xff0c…

chatgpt赋能python:Python编程教程:使用Python生成0到100的列表

Python编程教程&#xff1a;使用Python生成0到100的列表 Python是一种流行的编程语言&#xff0c;因其简单易学、强大而受到广泛欢迎。本文将介绍如何使用Python编程语言来生成0到100的数字列表。 什么是Python? Python是一种高级编程语言&#xff0c;由Guido van Rossum 在…

PHP+vue高校教学考研资料分享系统

运行环境:phpstudy/wamp/xammp等 开发语言&#xff1a;php 后端框架&#xff1a;Thinkphp5 前端框架&#xff1a;vue.js 服务器&#xff1a;apache 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat/phpmyadmin用户首次登录系统需要注册一个用户&#xff0c;用户在登陆平…