使用数组进行模拟栈的实现
数组初始容量为10进行测试
使用一维数组进行存储元素
选择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
点击链接加入群聊:企鹅群