Java之栈

news/2024/9/29 9:07:23 标签: java, 开发语言

Java当中给我们提供了一系列的栈的使用方法,

方法功能
Stack()构造一个空的栈
E push(E e)将e入栈,并返回e
E pop()将栈顶元素出栈并返回
E peek()获取栈顶元素
int size()获取栈中有效元素个数
boolean empty()检测栈是否为空

其中pop()会将栈顶元素取出后删除,但peek()只获取栈顶元素 不会删除

那么我们是否可以将栈给模拟实现呢?
在实现栈的基本操作时,要定义好栈内的成员变量,

1. 栈内成员

java">public class MyStack {
    int usedSize;//栈内有效数据个数
    int[] elme;//栈的底层是用数组实现的,所以用数组来存放栈内成员
    
    //给定一个构造方法,初始化栈容量为10
    public MyStack(int[] elme) {
        elme= new int [10];
    }
}

在定义了栈内的成员变量后,我们可以来编写成员方法来实现栈的基本操作了

2. 入栈

java"> public void push(int data){
        elme[usedSize]=data;
    }

3. 出栈

java">public int pop(){
        int oldval=elme[usedSize-1];
        usedSize--;
        return oldval;
    }

4. 取栈顶元素

java">    public int peek(){
        return elme[usedSize-1];
    }

5. 栈的扩容

java">public void ensureCapacity(){
        if(usedSize==elme.length){
            elme= Arrays.copyOf(elme,usedSize*2);
        }
    }

模拟实现栈后,我们来思考一个问题??
根据
栈的特点 先进后出

我们可以得到栈无论是取栈顶元素还是入栈,时间复杂度都是O(1).
我们思考能否使用链表来实现栈呢??

1.若用单链表实现栈,那么栈的头插,去头节点元素时间复杂度O(1),尾插,取尾节点元素时间复杂度O(n)
2.若使用双向链表实现栈,头插,去头节点元素,尾插,取尾节点元素时间复杂度O(1)

所有在使用链表实现栈时,我们更推荐使用双向链表


http://www.niftyadmin.cn/n/5682729.html

相关文章

苹果更新过时产品:三款 Mac 成“古董”,九款 Mac 彻底“停产”

9 月 24 日消息苹果今天更新了“过时产品”名单,新增加了三款 Mac 型号,并将另外九款 Mac 型号从“过时产品”归为“停产产品”。 新入列的 Mac 过时产品: MacBook Air(视网膜显示屏,13 英寸,2018 年&…

前段辅助工具分享(像素大厨)

引言: 我们在从事前端开发工作时,常会需要测量许多盒子的尺寸,颜色提取种种,切图,还有文字大小等信息,光从肉眼很难看出来,当然我们传统的会使用Photoshop来帮助我们完成这些工作,但…

Arch - 架构安全性_验证(Verification)

文章目录 OverView导图1. 引言:数据验证的重要性概述2. 数据验证的基本概念3. 数据验证的层次前端验证后端验证 4. 数据验证的标准做法5. 自定义校验注解6. 校验结果的处理7. 性能考虑与副作用8. 小结 OverView 即使只限定在“软件架构设计”这个语境下&#xff0c…

BFS的上下左右搜索问题(递归和迭代)

目录 一题目(单词搜索问题): 二思路解释: 三解答代码: ​编辑 四题目(腐烂的苹果): 五思路解释: 六解答代码: ​​​​ 一题目(单词…

[SAP ABAP] SELECTION-SCREEN

SELECTION-SCREEN用来调节系统生成的画面 REPORT z437_test_2024.TABLES: mara, zdbt_sch_437.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. " Title1 PARAMETERS:p_1 DEFAULT A,p_2 TYPE char10. SELECTION-SCREEN END OF BLOCK b1.SELECTION-SCREEN …

Spring、SpringBoot 框架功能学习

一. Spring核心功能 依赖注入(DI):Spring的核心功能是通过依赖注入来管理对象之间的依赖关系。依赖注入是一种将对象的依赖关系注入到被依赖对象中的机制,它可以帮助降低对象之间的耦合度,使得代码更容易维护和测试。 …

W39-02-jmeter中如何实现:下一个请求是需要根据前一个请求返回值进行循环请求

业务压测需求: 查询和上报接口, 1.查询接口返回的数据有好几条需要上报的数据 2.查询接口中返回的每条数据中,有两个字段需要传递到上报接口 3.查询接口中,这两个字段一个为int型,一个为数组[1,2,3,4] 实现方式 …

MFC单按钮启停实例

单击按钮启动、停止交替切欣换 1、在1Dlg.h文件中添加代码 public:CMy1Dlg(CWnd* pParent NULL); // standard constructorBOOL m_b;2、在1Dlg.cpp文件中添加代码 CMy1Dlg::CMy1Dlg(CWnd* pParent /*NULL*/): CDialog(CMy1Dlg::IDD, pParent) { m_hIcon AfxGetApp()->Lo…