|模拟栈的要求|
1.这个栈可以存储java中的任何引用的数据
2.在栈中提供push方法模拟压栈(栈满了,要有提示信息)
3.在栈中提供pop方法模拟弹栈。(栈空了,要有提示信息)
4.编写测试程序,new栈对象,调用push,pop方法来模拟压栈和弹栈的动作。
思路:
提供一个数组来存储栈中的元素:Object[] elements;
栈帧:永远指向栈顶部的元素: int index;
构造方法(应该给一维数组一个初始化容量)
push方法(表示压栈)
:压栈表示栈中多了一个元素
:如果栈已满,则提示压栈失败
pop方法(表示弹栈)
:弹栈表示栈中少了一个元素
:如果栈已空,则提示弹栈失败
main方法进行测试
===================================================
模拟类:
public class MyStack {
//默认初始化栈容量
private int capacity=20;
public int getCapacity() {
return capacity;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
}
//初始化栈帧,使其指向栈的顶部
int index=-1;
//方法构造
public MyStack() {
}
//可以自定义初始化容量
public MyStack(int capacity) {
this.capacity = capacity;
}
//创建一维数组,容量为capacity
Object[] elements = new Object[capacity];
//push方法,压栈表示多一个元素,如果栈已满,则提示压栈失败
public void push(Object p){
if (index==(capacity-1)){
//如果此时栈帧已经指向栈的最后一个元素,则压栈失败!并返回
System.out.println("栈已满!压栈失败!");
}else{
//反之,则将index向后加1,并赋上元素。输出压栈成功
elements[++index]=p;
System.out.println("压栈成功!");
}
}
//pop方法,弹栈表示栈中少一个元素,但是如果栈已空,则提示弹栈失败
public void pop(){
if (index == -1){
System.out.println("栈已空!弹栈失败!");
}else{
System.out.println(elements[index--]);
}
}
}
===================================================
测试类:
public class StackTest {
public static void main(String[] args) {
MyStack stack = new MyStack(5);
for (int i = 0;i<stack.getCapacity();i++){
stack.push(i);
}
stack.push(8);
for (int i = 0;i<stack.getCapacity();i++){
stack.pop();
}
}
}