Java教程

Java中使用数组模拟栈的压栈和弹栈

本文主要是介绍Java中使用数组模拟栈的压栈和弹栈,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java中使用数组模拟栈的压栈和弹栈

栈stack的知识

栈是一种数据结构

压栈:将元素放入栈中

弹栈:将元素移除栈中

栈帧:指向栈顶元素

栈顶:栈最上面的那个元素

特点:先进后出,后进先出

Java实现

MyStack类

package com.tqw_zg.stack;
//提供一个数组来存储栈中的元素
//Object[] object;

// 栈帧(永远指向栈顶部的元素)
// 每加1个元素,栈帧+1
// 每减1个元素,栈帧-1

// 构造方法
// 构造方法是不是应该给一维数组一个初始化容量。
public class MyStack {// 栈类
    private Object[] object;//数组,模拟栈
    private int index = -1;//栈帧

    public MyStack() {//无参构造方法,直接赋数组大小为10
        this.object = new Object[10];//创建大小为10的Object类的数组,课储存各种类型的数据
    }

    public MyStack(int num) {//有参构造方法,传入一个数,作为数组的大小
        this.object = new Object[num];//创建大小为num的Object类的数组,课储存各种类型的数据
    }
//setter and getter
    public Object[] getObject() {
        return object;
    }

    public void setObject(Object[] object) {
        this.object = object;
    }

压栈

 // push方法(push方法压栈)
    // 压栈表示栈中多一个元素。
    // 但是栈如果已满,压栈失败。
    // 这个方法的参数以及返回值类型自己定义。
    public void push(Object obj) {
        if (getObject().length - 1 <= index) {
            System.out.println("压栈失败");
        } else {
            object[++index] = obj;//0,1,2,3,4,5,6
            System.out.println("压栈成功");
            if (getObject().length - 1 == index) {
                System.out.println("栈满了");
            }
        }
    }

弹栈

// pop方法(pop方法弹栈)
    // 弹栈表示栈中少一个元素。
    // 但是栈如果已空,弹栈失败。
    // 这个方法的参数以及返回值类型自己定义。
    public void pop() {
        if (index == -1) {
            System.out.println("弹栈失败");
        } else {
            object[index--] = null;
            System.out.println("弹栈成功");
            if (index == -1) {
                System.out.println("栈空了");
            }
        }
    }

总的MyStack类

public class MyStack {// 栈类
    private Object[] object;//数组,模拟栈
    private int index = -1;//栈帧

    public MyStack() {//无参构造方法,直接赋数组大小为10
        this.object = new Object[10];//创建大小为10的Object类的数组,课储存各种类型的数据
    }

    public MyStack(int num) {//有参构造方法,传入一个数,作为数组的大小
        this.object = new Object[num];//创建大小为num的Object类的数组,课储存各种类型的数据
    }
//setter and getter
    public Object[] getObject() {
        return object;
    }

    public void setObject(Object[] object) {
        this.object = object;
    }
    //压栈
     public void push(Object obj) {
        if (getObject().length - 1 <= index) {
            System.out.println("压栈失败");
        } else {
            object[++index] = obj;//0,1,2,3,4,5,6
            System.out.println("压栈成功");
            if (getObject().length - 1 == index) {
                System.out.println("栈满了");
            }
        }
    }
    //弹栈
     public void pop() {
        if (index == -1) {
            System.out.println("弹栈失败");
        } else {
            object[index--] = null;
            System.out.println("弹栈成功");
            if (index == -1) {
                System.out.println("栈空了");
            }
        }
    }
}

测试代码

package com.tqw_zg.stack;

public class Test {
    public static void main(String[] args) {
        MyStack myStack=new MyStack(7);
        myStack.push("i");
        myStack.push(" love");
        myStack.push(" tqw  ");
        myStack.push(3);
        myStack.push("b");
        myStack.push(4);
        myStack.push("c");
        myStack.push(1);
        for(int i=0;i<7;i++) {
            System.out.print(myStack.getObject()[i]);
        }
        System.out.println();
        myStack.pop();
        myStack.pop();
        myStack.pop();
        myStack.pop();
        myStack.pop();
        myStack.pop();
        myStack.pop();
        myStack.pop();
        myStack.pop();
    }
}

测试结果

压栈成功
压栈成功
压栈成功
压栈成功
压栈成功
压栈成功
压栈成功
栈满了
压栈失败
i love tqw  3b4c
弹栈成功
弹栈成功
弹栈成功
弹栈成功
弹栈成功
弹栈成功
弹栈成功
栈空了
弹栈失败
弹栈失败

Process finished with exit code 0

感悟

1、在创建数组时必须先给定数组的大小;

2、Object类的数组可以输入任何类型的数据;

3、一般栈帧初始化为-1

这篇关于Java中使用数组模拟栈的压栈和弹栈的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!