使用数组模拟栈数据结构,实现栈帧指向,提供push方法模拟压栈,pop方法模拟弹栈。
主方法:
package com.bjpowercode.javase.array;
/**
* 编写要求程序,使用一位数组,模拟栈数据结构
* 要求:
* 1.这个栈可以存储java中的任何引用类型的数据
* 2.在栈中提供push方法模拟压栈(栈满了要有提示信息)
* 3.在栈中提供pop方法模拟弹栈(栈空了,也要有提示信息)
* 4.编写测试程序,new对象,调用push pop方法来模拟压栈弹栈的动作。
* 5.假设栈的默认初始化容量为10(注意无参数构造方法的编写方式)
* 例:
* public class MyStack{ //定义一个栈类
* //提供一个数组来存储栈中的元素
* Object[] elemants = new Object[];
*
* //栈帧(永远指向栈顶部元素)
* int index;
*
* //构造方法
* //构造方法是不是应该给一维数组一个初始化容量
*
* //push方法(push方法压栈)
* //压栈表示栈中多一个元素
* //但是如果已满,压栈失败
* //这个方法的参数以及返回值类型自己定义
*
* //pop方法(pop方法弹栈)
* //弹栈表示栈中少一个元素
* //但是栈如果已空,弹栈失败
* //这个方法的参数及返回值类型自己定义
* }
*
* main(){
* 测试程序......
* }
*/
public class HomeWork01 {
//向栈当中存储元素,我们这里使用一维数组模拟,存入栈中就表示存入数组当中。
//为什么选择Object类型数组,因为这个栈可以存储java中的任何引用类型的数据
private Object[] elemants;
//栈帧,永远指向栈顶部元素
//private int index = 0;//如果index采用0,表示栈帧指向了顶部元素的上方
//private int index = -1;//如果index采用-1,表示栈帧指向了顶部元素
private int index;
public HomeWork01() {
//动态初始化一位数组
//默认初始化容量是10
this.elemants = new Object[10];
//给index初始化
this.index = -1;
}
//提供一个压栈的方法
//obj表示被压如的元素
public void push(Object obj){
if (this.index >= this.elemants.length - 1){
System.out.println("压栈失败,栈已满!");
return;
}
//程序执行到这里,表示栈没满
/*this.index++;
this.elemants[index] = obj;*/
this.elemants[++index] = obj;
System.out.println("压栈"+ obj + "元素成功,栈帧指向" + index);
}
//弹栈方法pop,从数组中往外取元素
//每取出一个元素,栈帧向下移动1
public void pop(){
if (index < 0){
System.out.println("栈已空,弹栈失败!");
return;
}
//程序到此处说明栈还没有空
System.out.print("弹栈" + elemants[index] + "元素成功" + index);
//栈帧向下移动1
index--;
System.out.println("栈帧指向" + index);
}
public Object[] getElemants() {
return elemants;
}
public void setElemants(Object[] elemants) {
this.elemants = elemants;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
测试程序
package com.bjpowercode.javase.array;
public class HomeWork01Test {
public static void main(String[] args) {
//创建一个对象,初始化容量是10
HomeWork01 stack = new HomeWork01();
//调用方法压栈
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();
}
}
运行结果