java一维数组模拟栈数据结构

使用一维数组,模拟栈数据结构。

要求:

  • 1、这个栈可以存储java中任何引用数据类型。
  • 2、在栈中提供push方法模拟压栈。(栈满会有提示信息)
  • 3、在栈中提供pop方法模拟弹栈。(栈空了也要有提示信息)
  • 4、编写测试程序,new栈对象,调用push、pop方法来模拟压栈弹栈动作。

MyStack类:

public class MyStack {

    /**属性私有化需要get和set方法*/
    private Object[] elements;

    /**栈帧,永远指向栈顶元素。
    栈顶初始默认值应该是-1,因为刚开始栈是空的没有元素。*/
    private  int index ;


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

    /**
     * 压栈的方法
     * @param obj 被压入元素
     */
    public void  push(Object obj){
        if (this.index >= this.elements.length - 1){
            System.out.println("栈已满,压栈失败!");
            return;
        }
        //程序能走到这里,说明栈没满
        //向栈中加1个元素,栈帧向上移动一个位置。
        this.index++;
        this.elements[index] = obj;
        //所有System.out.println()方法执行时。如果输出引用的话,自动调用引用的toString()方法
        System.out.println("压栈" + obj + "元素成功,栈帧指向" + index);
    }

    /**
     * 弹栈的方法,从数组中取出一个元素
     * @return
     */
    public void pop(){
       if (index < 0 ){
           System.out.println("弹栈失败,栈已空");
           return;
       }
        System.out.print("弹栈" + elements[index] + "元素成功,");
        index--;
        System.out.println("栈帧指向" + index);
    }

    /**set 和 get也许用不上,但是必须写上,这是规则
    封装:第一步:属性私有化,第二步:对外提供set和get方法。*/
    public Object[] getElements() {
        return elements;
    }

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

StackTest类:

public class SatckTest {
    public static void main(String[] args) {

        //创建一个栈对象,初始化容量是10个
        MyStack stack = new MyStack();
        stack.push(new Object());
        stack.push(new Object());
        stack.push(new Object());
        stack.push(new Object());
        stack.push(new Object());
        stack.push(new Object());
        stack.push(new Object());
        stack.push(new Object());
        stack.push(new Object());
        stack.push(new Object());

        //压这个元素失败了
        stack.push(new Object());

        stack.pop();
        stack.pop();
        stack.pop();
        stack.pop();
        stack.pop();
        stack.pop();
        stack.pop();
        stack.pop();
        stack.pop();
        stack.pop();
        stack.pop();
    }
}

输出结果:
java一维数组模拟栈数据结构_第1张图片

你可能感兴趣的:(java,栈,数据结构,stack,封装)