问题描述:
使用一维数组,模拟栈数据结构。
要求:
1、这个栈可以存储java中的任何引用类型的数据。
2、在栈中提供push方法模拟压栈。(栈满了,要有提示信息。)
3、在栈中提供pop方法模拟弹栈。(栈空了,也有有提示信息。)
4、编写测试程序,new栈对象,调用push pop方法来模拟压栈弹栈的动作。
问题分析:
需要定义一个栈帧变量index,来一直指向栈顶,初始时index = -1。
代码实现:
MyStack类:
public class MyStack {
private Object[] elements;
private int index = -1; //表示index指向顶部元素
public MyStack() {
this.elements = new Object[10];
}
//封装
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;
}
/*
push压栈方法
*/
public void push(Object obj){
if (this.index >= this.elements.length-1){
System.out.println("栈已满,无法压栈");
return;
}
this.index++;
this.elements[index] = obj;
System.out.println("压栈" + obj + "成功,栈帧指向->" + index);
}
//pop弹栈方法,需要返回值
public Object pop(){
if(this.index <= -1){
System.out.println("栈已空,无法弹栈");
return 0;
}
Object t = elements[index--];
System.out.println("弹栈" + t + "成功,栈帧指向->" + index);
return t;
}
}
MyStackTest类:
package com.why.shuzu.Homework;
public class MyStackTest {
public static void main(String[] args) {
MyStack stack = new MyStack();
stack.push(new Object());
stack.push(new Object());
stack.pop();
}
}
测试之后发现,可以通过push、pop方法来实现压栈、弹栈。