使用一维数组,模拟栈数据结构。
要求: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
弹栈失败,栈已空
*/
}