13、java数组练习1

使用一维数组,模拟栈数据结构。
要求:1、这个栈可以存储Java中的任何引用数据类型
2、在栈中提供push方法模拟压栈(栈满了有提示信息)
3、在栈中提供pop方法模拟弹栈(栈空了有提示信息)
4、编写测试程序,new栈对象,调用push pop方法模拟压栈弹栈的动作
5、假设栈的默认初始化容量是10.(请注意无参数构造方法的编写)

package com.bjpwernode.javase.array.homework;
/*
使用一维数组,模拟栈数据结构。
要求:1、这个栈可以存储Java中的任何引用数据类型
2、在栈中提供push方法模拟压栈(栈满了有提示信息)
3、在栈中提供pop方法模拟弹栈(栈空了有提示信息)
4、编写测试程序,new栈对象,调用push pop方法模拟压栈弹栈的动作
5、假设栈的默认初始化容量是10.(请注意无参数构造方法的编写)

 */
public class MyStack {
    
    
    //向栈当中存储元素,我们可以使用一维数组模拟,存到栈中,表示存储到数组中。
    //为什么选择Object类型数组?因为这个栈可以存放java中任何引用类型的数据
    //private Object[] elements = new Object[10];
    private Object[] elements;

    public MyStack() {
    
    
        this.elements = new Object[10];

    }
    //栈帧,永远指向栈顶部元素
    private int index = -1;

    //push压栈方法
    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);

    }

    //弹栈方法
    public void pop(){
    
    
        if(index < 0){
    
    //index在进行压栈的时候,从-1开始,那么弹栈的时候,-1已经没有栈可以弹了
            System.out.println("弹栈失败,栈已空");
        }
        System.out.println("弹栈" + elements[index] + "元素成功,栈帧指向"+ index);
        //向下移一位
        index--;
        System.out.println("栈帧指向" + index);



    }

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

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

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



}



package com.bjpwernode.javase.array.homework;

public class MyStackTest {
    
    
    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();
        stack.pop();
    }
    /*
    结果压栈java.lang.Object@7f31245a元素成功,栈帧指向0
压栈java.lang.Object@6d6f6e28元素成功,栈帧指向1
压栈java.lang.Object@135fbaa4元素成功,栈帧指向2
压栈java.lang.Object@45ee12a7元素成功,栈帧指向3
压栈java.lang.Object@330bedb4元素成功,栈帧指向4
压栈java.lang.Object@2503dbd3元素成功,栈帧指向5
压栈java.lang.Object@4b67cf4d元素成功,栈帧指向6
压栈java.lang.Object@7ea987ac元素成功,栈帧指向7
压栈java.lang.Object@12a3a380元素成功,栈帧指向8
压栈java.lang.Object@29453f44元素成功,栈帧指向9
压栈失败,栈已经满了
弹栈java.lang.Object@29453f44元素成功,栈帧指向9
栈帧指向8
弹栈java.lang.Object@12a3a380元素成功,栈帧指向8
栈帧指向7
弹栈java.lang.Object@7ea987ac元素成功,栈帧指向7
栈帧指向6
弹栈java.lang.Object@4b67cf4d元素成功,栈帧指向6
栈帧指向5
弹栈java.lang.Object@2503dbd3元素成功,栈帧指向5
栈帧指向4
弹栈java.lang.Object@330bedb4元素成功,栈帧指向4
栈帧指向3
弹栈java.lang.Object@45ee12a7元素成功,栈帧指向3
栈帧指向2
弹栈java.lang.Object@135fbaa4元素成功,栈帧指向2
栈帧指向1
弹栈java.lang.Object@6d6f6e28元素成功,栈帧指向1
栈帧指向0
弹栈java.lang.Object@7f31245a元素成功,栈帧指向0
栈帧指向-1
弹栈失败,栈已空
     */
}

猜你喜欢

转载自blog.csdn.net/Alopecian/article/details/114669592