【数据结构】顺序栈的原理及实现

news2024/11/16 20:42:52

【数据结构】顺序栈的原理及实现

1.什么是栈

  • 栈它是一种先进后出的有序列表数据结构。
  • 栈是线性表里的元素插入和删除只能在该线性表的同一端进行的一种特殊线性表。
  • 该线性表的插入和删除都叫栈顶,也就是变化的一端。另一端是固定不变的成为栈底。
  • 根据下图可以看出,最先放入栈的元素是在栈底的,最后放入的元素是在栈顶的。
  • 删除元素的话是最后放入的元素最先被删除掉,最先放入的元素最后被删除。

在这里插入图片描述

2.顺序栈的功能实现

初始化栈public ListStack(int maxSize)
判断是否栈空public boolean isEmpty()
判断是否栈满public boolean isFull()
入栈public void push(T data)
出栈public int pop()
返回栈顶元素public int peekStack()
遍历栈内所有元素public void show()

(1)初始化栈

在这里插入图片描述

(2)判断当前栈是否已满

在这里插入图片描述

(3)判断当前栈是否为空

在这里插入图片描述

(4)遍历栈内所有元素

在这里插入图片描述

(5)元素压栈操作

在这里插入图片描述

(6)元素出栈操作

在这里插入图片描述

3.顺序栈功能测试

(1)整体代码实现

public class ListStack<T> {

    /**
     * 定义最大的长度
     */
    private final int maxSize;

    /**
     * 定义栈顶下标
     */
    private int top = 0;

    /**
     * 定义数组
     */
    private final T[] stack;

    /**
     * 定义默认的长度
     */
    private final static int DEFAULT_SIZE = 10;

    /**
     * 有参构造方法,自定义栈的大小
     * @param maxSize
     */
    public ListStack(int maxSize){
        this.maxSize = maxSize;
        stack = (T[]) new Object[maxSize];
    }

    /**
     * 判断栈是否是满的
     * @return
     */
    public boolean isFull(){
        return top == maxSize;
    }

    /**
     * 判断栈是否为空
     * @return
     */
    public boolean isEmpty(){
        return top == 0;
    }

    /**
     * 元素入栈
     * @param data
     */
    public void push(T data){
        if(isFull()){
            throw new RuntimeException("当前栈空间已满");
        }
        //数据入栈操作
        stack[top] = data;
        top++;
    }

    /**
     * 元素出栈
     * @return
     */
    public T pop(){
        if(isEmpty()){
            throw new RuntimeException("当前栈空间为空,无法出栈");
        }
        //先进行--操作,在弹出--后的下标的数据
        return stack[--top];
    }

    /**
     * 遍历栈的数据
     */
    public void show(){
        for(int i=0;i<top;i++){
            System.out.print(stack[i]+" ");
        }
        System.out.println();
    }

    /**
     * 返回栈顶元素
     * @return
     */
    public T peekStack(){
        return stack[top-1];
    }

    public static void main(String[] args) {
        ListStack<Integer> listStack = new ListStack<>(5);

        System.out.println("判断栈是否为空:"+listStack.isEmpty());
        System.out.println("判断栈是否已满:"+listStack.isFull());
        System.out.println("向栈中添加元素: 1 2 3");
        listStack.push(1);
        listStack.push(2);
        listStack.push(3);
        System.out.println("输出当前栈中的元素:");
        listStack.show();
        System.out.println("前栈弹出 一个 元素");
        listStack.pop();
        System.out.println("输出当前栈中的元素:");
        listStack.show();
        System.out.println("栈顶元素为:"+listStack.peekStack());
    }
}

(2)测试代码

在这里插入图片描述

4.栈的优缺点

  • 优点:在输入的数据量在可以预知的情况下,可以使用数组来实现栈,并且的话数据的实现栈效率会更高,因为出栈和入栈的操作都在数组的末尾来进行操作。
  • 缺点:对数组的大小创建不当的话,可能会出现栈溢出。

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

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

相关文章

《高性能MySQL》——架构与历史(笔记)

文章目录一、MySQL架构与历史1.1.1 连接管理与安全性1.1.2 优化与执行1.2 并发控制1.2.1 读写锁1.2.2 锁粒度&#xff08;锁模式&#xff09;表锁(table lock)行级锁(row lock)1.3 事务1.3.1 隔离级别READ UNCOMITTED (读未提交)READ COMMITTED (读提交)REPEATABLE READ (可重复…

初识C++(学习计划)

前言 基于对C语言的学习&#xff0c;我将进一步学习C的相关知识。 我们在使用C语言时创建的是.c文件&#xff0c;使用C使用的是.cpp文件&#xff0c;其中p——plus&#xff08;加&#xff0c;的意思&#xff09;&#xff0c;所以cpp就是c。 C是为了解决一些C语言不能解决的问题…

SpringBatch使用(一)

一、SpringBatch简介 1、Spring Batch是一个轻量级&#xff0c;全面的批处理框架&#xff0c;旨在开发对企业系统日常运营至关重要的强大批处理应用程序。Spring Batch构建了人们期望的Spring Framework特性&#xff08;生产力&#xff0c;基于POJO的开发方法和一般易用性&…

docker安装elasticsearch kibana 8.6.0(设置密码+汉化+ik分词器)

安装eskibana安装:拉取镜像并安装设置密码汉化配置ik分词器安装: 记得开放使用的端口,或者关闭防火墙 提示:需要提升虚拟机或者服务器的内存到8G以上 拉取镜像并安装 docker pull elasticsearch:8.6.0 docker pull kibana:8.6.0docker network create es-netdocker run -it…

Itext7在PDF指定位置添加电子公章

目录 1. 电子公章的制作 2. java工具keytool生成p12数字证书文件 3. pom依赖 4. 实体类 5. 工具类及测试示例 6. 效果 1. 电子公章的制作 做章网站&#xff1a;http://seal.biaozhiku.com/ 我们选择圆形印章 然后输入公司名&#xff0c;输入章名输入编码然后点击395生成&…

快速幂及矩阵快速幂分析及代码实现

文章目录前言一、认识快速幂二、快速幂思路及代码三、矩阵快速幂3.1、矩阵乘法代码实现3.2、矩阵快速幂代码实现参考资料前言 在学习Acwing c蓝桥杯辅导课第九讲复杂DP-AcWing 1303. 斐波那契前 n 项和时有使用到矩阵快速幂算法&#xff0c;这里来记录下知识点正好也将快速幂部…

车载以太网 - SomeIP测试专栏 - 详细解析 - 01

对于介绍SomeIP协议&#xff0c;我还是想从最基础的协议解析来&#xff0c;所以今天还是先将SomeIP协议详解给大家列举一下&#xff0c;也方便大家在工作中如果不记得哪些信息随时可以查看学习&#xff0c;也算是留给我自己的笔记吧&#xff0c;毕竟确实容易忘记。 SomeIP数据&…

分布式数据库中间件——Mycat2

一、Mycat2 概述 Mycat是基于java语言编写的数据库中间件&#xff0c;核心功能是分库分表和读写分离&#xff0c;可以将大表水平分割为N个小表。 可以看做为Mysql的数据库服务器&#xff0c;可以用连接Mysql的方式去连接Mycat&#xff0c;端口为8066 二、Mycat的三大作用 2.…

Node 项目中常见的问题及解决方法

1. window和mac下设置NODE_ENV变量的问题 我们都知道在前端项目中会根据不同的环境变量来处理不同的逻辑&#xff0c;在node后端中也一样&#xff0c;我们需要设置本地开发环境、测试环境、 线上环境等&#xff0c;此时有一直设置环境变量的方案是在package.json中的script属性…

Python学习笔记——错误和异常

错误的分类编写程序过程中遇到的错误都分为两类&#xff1a;语法错误与运行时错误。语法错误&#xff1a;当代码不符合Python语法规则时, 在解析过程中会报SyntaxError。运行时错误&#xff1a;即语句或表达式在语法上都是正确的, 但在运行时发生了错误。当程序发生异常时&…

从零搭建完整python自动化测试框架(UI自动化和接口自动化

从零搭建完整python自动化测试框架&#xff08;UI自动化和接口自动化&#xff09; 文章目录 总体框架 PO模式、DDT数据驱动、关键字驱动 框架技术选择 框架运行结果 各用例对应的定义方式&#xff08;PO/DDT&#xff09; 测试执行结果 从零开始搭建项目 一、开发环境搭…

Vue-Vuex

前言 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库 官网介绍&#xff1a;https://vuex.vuejs.org/zh/ 以下主要讲解的是如何定义与使用&#xff0c;如果还没有对vuex进行了解的话&#xff0c;请先查看官网&#xff0c;了解其功能、用法及用途。 关于vuex&#xff0c…

代码随想录算法训练营第五十二天_第九章_动态规划 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

LeetCdoe 121. 买卖股票的最佳时机给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可…

verilog 数字系统设计读书笔记-------持久更新

Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们所对应的模型类型共有以下5种&#xff1a;系统级、算法级、RTL级、门级、开关级‘bz :表示高阻态&#xff0c; ’bx表示不定值&#xff08;0或1均可&#xff09;include "muxtwo.v" 将文件引进{$ ra…

【Linux】怎么理解进程

✍作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Liunx系统编程 本文通过冯诺依曼体系结构&#xff08;硬件部分&#xff09;和操作系统&#xff08;软件部分&#xff09;为基础来介绍我们应该如何理解进程&#xff0c;为后续的学习做铺垫。 本文目录一、预备知识1.建…

误差逆传播算法公式理解及推导

前言&#xff1a;公式理解及推导参考自《机器学习》周志华 P101 BP网络 BP网络一般是指由 误差逆传播&#xff08;error BackPropagation, BP&#xff09;算法训练的多层前馈神经网络。 给定训练集 D{(x1,y1)D\left\{\left(\boldsymbol{x}_1, \boldsymbol{y}_1\right)\right…

2023年我的Flag已准备完毕

前言&#xff1a; &#x1f604;作者简介&#xff1a;小曾同学.com,小伙伴们也可以叫我小曾&#xff0c;一个致力于测试开发的博主⛽️ 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a…

用力过猛,把服务压挂了?

背景 在刚开始进行压测的时候&#xff0c;我也不知道需要提前分析下压测的QPS目标&#xff0c;也不知道说第一步压测的预估值是多少&#xff0c;结果一下子干上去&#xff0c;就把测试环境的服务给整挂了&#xff0c;然后就迎来了一大波的投诉&#xff08;好惨呐&#xff09…

【6-循环神经网络】北京大学TensorFlow2.0

课程地址&#xff1a;【北京大学】Tensorflow2.0_哔哩哔哩_bilibiliPython3.7和TensorFlow2.1六讲&#xff1a;神经网络计算&#xff1a;神经网络的计算过程&#xff0c;搭建第一个神经网络模型神经网络优化&#xff1a;神经网络的优化方法&#xff0c;掌握学习率、激活函数、损…

基于微信小程序的校园自助打印系统小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.…