编写程序,使用一维数组,模拟栈数据结构。 要求: 1、这个栈可以存储java中的任何引用类型的数据。[Object类数组] 2、在栈中提供push方法模拟压栈。(栈满了,要有提示信息。 ) 3、在栈中提供pop方法模拟弹栈。(栈空了,也有有提示信息。) 4、编写测试程序, new栈对象,调用push pop方法来模拟压栈弹栈的动作。 5、栈中元素在无参传递下默认定义10个元素 ?
?
代码演示:?
package com.bjpowernode.javase.array.homework01;
// 模仿压栈弹栈
public class MyStack {
// 向栈中储存元素
// Object类型数组,因为都继承Object 所以可以储存任意类型的数据
private Object[] elements; // 默认为null
// 栈帧:永远指向栈顶元素
// 为0的时候:表示栈帧指向了数组里面的第一个元素顶部
// 为-1时候:表示数组里面是空的
// 注意:最初的栈是空的,一个元素也没有
private int index;
// 无参构造
public MyStack() {
// 假设这个数组当中可以储存10个元素
// 给elements初始化
this.elements=new Object [10];
// 给index初始化
this.index =-1;
}
// 定义一个压栈的方法 压栈肯定是有一个参数传进来压
public void push(Object obj){
// 先判断栈是否满了
if (this.index>=this.elements.length-1){
System.out.println("栈已满,压栈失败");
return;
}
// 程序能执行到这里 说明栈没有满
index++; // 栈帧依次往上加
elements[index] =obj; // 将调用的obj对象添加到数组当中 [栈帧也可以看成下标] 栈帧每加1 就添加一个对象到数组当中
System.out.println("元素:"+obj+"压栈成功,栈帧为:"+index);
}
// 定义一个弹栈方法
public void pop(){
// 先判断栈是否为空
if (index<0){ // 栈帧小于0 说明数组里面没有元素
System.out.println("栈为空,弹栈失败");
return;
}
// 程序能执行到这里说明栈没有空
System.out.print("弹栈"+elements[index]+"元素成功"); // 由上面压栈可知这时的栈帧为9 elements[index]是下标为9的元素
index--;
System.out.println("栈帧为:"+index); // 弹栈成功后栈帧就要减1 所以先-- 再输出栈帧
}
// 虽然有可能用不到关卡,但以后写代码的时候也要写
public Object[] getElements() {
return elements;
}
public void setElements(Object[] elements) {
this.elements = elements;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
代码测试:?
package com.bjpowernode.javase.array.homework01;
public class AraayTest10 {
public static void main(String[] args) {
MyStack myStack =new MyStack();
// 调用压栈方法
for (int i=0;i<11;i++){
myStack.push(new Object());
}
// 调用弹栈方法
for (int j=0;j<11;j++){
myStack.pop();
}
}
}
运行结果:?
?
|