Java写数据结构:栈

1.概念:

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

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

出栈:栈的删除操作叫做出栈。出数据在栈顶。

2.栈的方法:

接下来就来一一模拟实现上述栈的方法↓

先把最基本的成员变量和构造方法完成

复制代码
public class MyStack {
    public int[] elem;
    public int usedsize;

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

实现push方法

复制代码
 public void push(int val){
        if(isFull()){
            this.elem = Arrays.copyOf(elem , elem.length * 2);
        }
        elem[usedsize++] = val;
    }

    private boolean isFull(){
        return usedsize == elem.length;
    }

实现pop方法

先自定义创建一个空栈异常类

复制代码
public class EmptyStackException extends RuntimeException {
    public EmptyStackException() {

    }

    public EmptyStackException(String message) {

        super(message);
    }
}

pop方法

复制代码
 public int pop(){
        if(isEmpty()){
            throw new EmptyStackException();
        }
        int val = elem[usedsize - 1];
        usedsize--;
        return val;
    }
private boolean isEmpty(){
        return usedsize == 0;
    }

实现peek方法

复制代码
 public int peek(){
        if(isEmpty()){
            throw new EmptyStackException();
        }
        return elem[usedsize - 1];
    }

private boolean isEmpty(){
        return usedsize == 0;
    }

测试:

复制代码
public class Test {
    //测试MyStack
    public static void main1(String[] args) {

        MyStack myStack = new MyStack();
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        myStack.push(4);
        myStack.push(5);

        System.out.println(myStack.peek());
        System.out.println(myStack.pop());
        System.out.println(myStack.peek());
    }
}

结果:

相关推荐
寒秋花开曾相惜40 分钟前
(学习笔记)第四章 处理器体系结构
linux·网络·数据结构·笔记·学习
故事和你911 小时前
洛谷-数据结构1-1-线性表1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
脱氧核糖核酸__1 小时前
LeetCode热题100——53.最大子数组和(题解+答案+要点)
数据结构·c++·算法·leetcode
脱氧核糖核酸__2 小时前
LeetCode 热题100——42.接雨水(题目+题解+答案)
数据结构·c++·算法·leetcode
techdashen2 小时前
Rust项目公开征测:Cargo 构建目录新布局方案
开发语言·后端·rust
一 乐2 小时前
电影院|基于springboot + vue电影院购票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·电影院购票管理管理系统
星空椰2 小时前
JavaScript 进阶基础:函数、作用域与常用技巧总结
开发语言·前端·javascript
恼书:-(空寄2 小时前
JVM GC 日志分析 + 常见 GC 场景 + 实战参数调优
java·jvm
消失的旧时光-19432 小时前
Spring Boot 实战(五):接口工程化升级(统一返回 + 异常处理 + 错误码体系 + 异常流转机制)
java·spring boot·后端·解耦
忒可君2 小时前
C# winform 自制分页功能
android·开发语言·c#