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

数据结构之栈

在这里插入图片描述

作者简介: zoro-1,目前大二,正在学习Java,数据结构等
作者主页: zoro-1的主页
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

数据结构之栈

  • 概念
  • 特性
  • 常用方法
  • 栈模拟实现
    • 接口
    • 实现类

概念

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

特性

先进后出
例如生活中的羽毛球:
在这里插入图片描述

常用方法

在这里插入图片描述

栈模拟实现

接口

public interface IStack {
        void push(int x);

        int pop();

        int peek();

        int size();

        boolean empty();

        boolean full();

}

实现类

public class MyStack implements IStack {
    private int[] elem;
    private int usedSize;//可以存放数据元素的下标

    private static final int DEFAULT_CAPACITY = 10;
    private int size = 0;

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

    public MyStack(int size) {
        this.elem = new int[size];
        this.size = size;
    }

    @Override
    public void push(int x) {
        if (usedSize >= this.size) {
            throw new IllegalArgumentException("栈满了");
        }
        elem[usedSize++] = x;
    }

    @Override
    public int pop() {
        if (full()) {
            throw new IllegalArgumentException("栈空了");
        }
        int m= elem[usedSize-1];
        usedSize--;
        return m;
    }

    @Override
    public int peek() {
        if (full()) {
            throw new IllegalArgumentException("栈空了");
        }
        return elem[usedSize - 1];
    }

    @Override
    public int size() {
        return usedSize;
    }

    @Override
    public boolean empty() {
        return usedSize == 0;
    }

    @Override
    public boolean full() {
        return usedSize == size;
    }
}

今天的分享到这就结束了,记得三连哦,谢谢大家支持
在这里插入图片描述


http://www.kler.cn/news/161240.html

相关文章:

  • jstack java堆栈跟踪工具
  • 排序算法介绍(一)插入排序
  • TCP通讯
  • 《Linux源码趣读》| 好书推荐
  • 华清作业day41
  • springboot084基于springboot的论坛网站
  • 【Redis】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)
  • git 配置多端多个账号(码云、github、gitlab)
  • 毕设:《基于hive的音乐数据分析系统的设计与实现》
  • Ardupilot开源飞控之Invensense IMUs
  • 使用bard分析视频内容
  • 加载离线镜像包:在线镜像离线为tar包、tar离线镜像包加载并根据imageId打tag
  • INFINI Easysearch 与华为鲲鹏完成产品兼容互认证
  • 【文件上传系列】No.0 利用 FormData 实现文件上传、监控网路速度和上传进度(原生前端,Koa 后端)
  • 获取MATLAB默认配色方案
  • Git初学入门指令
  • Android平板还能编程?Ubuntu本地安装code-server远程编程写代码
  • Mysql综合案例练习<1>
  • SpringbootWeb登录认证
  • 【JavaScript】JS——Map数据类型
  • 视频监控管理平台/智能监测/检测系统EasyCVR智能地铁监控方案,助力地铁高效运营
  • 用23种设计模式打造一个cocos creator的游戏框架----(四)装饰器模式
  • MySQl int(1)、int(20) 的区别到底在哪里
  • JVM虚拟机(已整理,已废弃)
  • Spring Cache快速入门教程及案例
  • Java程序员,你掌握了多线程吗?【文末送书】
  • js取出对象数组某个属性拼接成字符串或者取出某些属性组成新的数组
  • 【C/PTA】结构体进阶练习
  • 将图像增广应用于Mnist数据集
  • scp 指令详细介绍