数组模拟栈


使用数组进行模拟栈的实现

  1. 数组初始容量为10进行测试
  2. 使用一维数组进行存储元素
  3. 选择Object类型,能够存储Java中的任何引用类型的数据

StackMoc.java

/**
 * @ClassName: StackMoc
 * @Description: TODO: 使用数组模拟栈
 * @Date: 2020/6/10 22:08
 */
public class StackMoc {

    /**
     * 向栈中存储元素,我们这里使用一维数组
     * 数组是我们学习Java的第一个容器
     * 选择Object类型,能够存储java中的任何引用类型的数据
     */
    private Object[] elements;

    // 栈帧,永远指向栈顶部元素
    // 那么这个默认初始值应该是多少?最初的栈是空的,一个元素都没有

    private int index;

    public StackMoc() {
        // 一维数组动态初始化
        // 默认初始化容量为10
        this.elements = new Object[10];
        this.index = -1;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public StackMoc(Object[] elements) {
        this.elements = elements;
    }

    public Object[] getElements() {
        return elements;
    }

    public void setElements(Object[] elements) {
        this.elements = elements;
    }

    /**
     * 压栈的方法
     *
     * @param element 被压入的元素
     */
    public void push(Object element) {
        if (this.index >= this.elements.length - 1) {
            System.out.println("压栈失败,栈已满");
            return;
        }
        this.index++;
        this.elements[index] = element;
        System.out.println("压栈" + element + "成功,栈帧指向:" + this.index);
    }

    /**
     * 弹栈
     * 从数组中往外取元素
     * 每取出一个元素,栈帧向下移动一位
     *
     * @return
     */
    public Object pop() {
        if (this.index < 0) {
            System.out.println("栈已空,弹栈失败");
            return null;
        }
        // 执行到此说明栈没有空
        System.out.print("弹栈" + elements[index] + "成功,");
        // 栈帧向下移动一位
        index--;
        System.out.print("栈帧指向" + index);
        return null;
    }
}

主函数进行测试

/**
 * @ClassName: MyStack
 * @Description: TODO: 测试数组模拟的栈
 * @Date: 2020/6/11 15:50
 */
public class MyStack {

    public static void main(String[] args) {

        // 创建一个栈对象
        StackMoc stackMoc = new StackMoc();

        // 调用压栈方法
        stackMoc.push(new Object());
        stackMoc.push(new Object());
        stackMoc.push(new Object());
        stackMoc.push(new Object());
        stackMoc.push(new Object());
        stackMoc.push(new Object());
        stackMoc.push(new Object());
        stackMoc.push(new Object());
        stackMoc.push(new Object());
        stackMoc.push(new Object());

        // 弹栈
        Object elem = stackMoc.pop();
    }
}

测试结果:

压栈java.lang.Object@16d3586成功,栈帧指向:0
压栈java.lang.Object@154617c成功,栈帧指向:1
压栈java.lang.Object@a14482成功,栈帧指向:2
压栈java.lang.Object@140e19d成功,栈帧指向:3
压栈java.lang.Object@17327b6成功,栈帧指向:4
压栈java.lang.Object@14ae5a5成功,栈帧指向:5
压栈java.lang.Object@131245a成功,栈帧指向:6
压栈java.lang.Object@16f6e28成功,栈帧指向:7
压栈java.lang.Object@15fbaa4成功,栈帧指向:8
压栈java.lang.Object@1ee12a7成功,栈帧指向:9
弹栈java.lang.Object@1ee12a7成功,栈帧指向8

文章作者: virus
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 virus !
 上一篇
网站高并发解决方案-理论知识 网站高并发解决方案-理论知识
本文转自:http://www.php20.cn/article/sw/%E9%AB%98%E5%B9%B6%E5%8F%91/244 1. CDN代理层 在高并发下,为了解决带宽问题,全站必须做前后端分离操作,所有前端资源都可进行CD
2020-06-16
下一篇 
PHP性能如何优化 PHP性能如何优化
变量 变量的性能排行:局部变量 > 全局变量 > 类属性 > 未定义的变量 变量大小,注意变量大小是节约内存的最有效的手段。对于来自表单、数据库和文件缓存的数据都需要控制变量的大小
2020-05-22
  目录