1、这个栈可以存储java中的任何引用类型的数据。
2、在栈中提供push方法模拟压栈。
3、在栈中提供pop方法模拟弹栈。
4、编写测试程序,
5、假设栈的默认初始化容量是10.
public class Stack{
//要想存储所有的引用类型的数据,数组类型要为Object
private Object[] objs;
//栈帧
private int index;
//构造方法
//对象创建后数组objs中的元素都为null,即栈为空
public MyStack() {
//构造方法中对实例变量进行初始化
this.objs = new Object[10];
//栈帧始终指向栈顶元素,将其初始值设为-1
this.index = -1;
}
//setter and getter
public Object[] getObjs() {
return objs;
}
public void setObjs(Object[] objs) {
this.objs = objs;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
//push()方法
public void push(Object object){
//判断栈是否满了
//栈帧始终指向栈顶元素
//栈帧初始值为-1,当栈帧等于数组长度减一时栈满
if (index >= objs.length - 1){
System.out.println("栈满,压栈失败!");
return;
}
//栈帧初始值为-1,所以栈帧先加一后在压栈
//例如:压入第一个元素时,栈帧先加一后为0,将元素压入objs[0]
objs[++index] = object;
System.out.println("压栈" + object + "成功,栈帧指向" + index);
}
//pop()方法
public void pop(){
//判断栈是否为空
//index <= -1(初始值)时栈空
if (index < 0){
System.out.println("栈空,弹栈失败");
return;
}
index--;
System.out.println("弹栈" + objs[index + 1] + "成功,栈帧指向:" + index);
}
}
?
public class StackTest {
public static void main(String[] args) {
Stack Stack = new Stack();
Stack.push(new Object());
Stack.pop();
Stack.pop();
}
}
因为没有重写toString()方法,所以输出引用时会输出 “该引用的类型@该引用中存储的内存地址”。
?
|