题目
编写程序,使用一维数组,模拟栈数据结构
要求
- 这个栈可以存储java中任何引用数据类型的数据
- 在栈中提供push方法模拟压栈。 (栈满,有提示)
- 在栈中提供pop方法模拟弹栈 (栈空,也有提示)
- 编写测试程序,new栈对象,调用push,pop方法来模拟压栈弹栈的动作
- 不传参数时,默认初始化时栈空间容量为10
思路
public class MyStack {//栈类
提供一个数组来存储栈中的元素
Object[] elements;
栈帧(永远指向栈顶部的元素)
每加1个元素,栈帧+1
每减1个元素,栈帧-1
int index;
构造方法
构造方法是不是应该给一维数组一个初始化容量
push方法( push 方法压栈)
压栈表示栈中多一个元素
但是栈如果已满,压栈失败
这个方法的参数以及返回值类型自己定义
pop方法(pop 方法弹栈)
弹栈表示栈中少一个元素
但是栈如果已空,弹栈失败
这个方法的参数以及返回值类型自己定义
}
编程实现
java
public class MyStack {
//为啥选用Object 数组,因为Object可以存任何引用数据类型的数据
//提供一个数组来存储栈中的元素
private Object[] elements;
//栈帧(永远指向栈顶部的元素) 初始化0
private int index = 0 ; //如果index采用0,表示栈帧指向了顶部元素的上方
// private int index = -1 ; //如果index采用-1,表示栈帧指向了顶部元素
public MyStack(){
//默认初始化容量
this.elements = new Object[10];
}
public MyStack(Object[] elements){
this.elements = elements;
}
public void setElements(Object[] elements) {
this.elements = elements;
}
public Object[] getElements() {
return elements;
}
public void setIndex(int index) {
this.index = index;
}
public int getIndex() {
return index;
}
// push方法( push 方法压栈)
public void push(Object ele){
//先判断栈是否满了
if (this.index <this.elements.length){
//压栈操作
// this.elements[this.index] = ele;
//向栈中加1个元素,栈帧向上移动一个位置
// this.index++;
this.elements[this.index++] = ele; //整合方法 index是 index++ 或者++index 取决于 index初始化的值
System.out.println("栈空间还剩"+(this.elements.length-this.index)+"数据"+ele+",压栈成功");
}else {
System.out.println("栈空间已满,压栈失败");
}
}
// pop方法(pop 方法弹栈)
public Object pop(){
//先判断栈内是否有数据
if(this.index>0){
System.out.println("弹出栈内元素:"+this.elements[this.index-1]);
this.index--;
System.out.println("栈帧指向:"+this.index);
return this.elements[this.index];
}else {
System.out.println("栈内无元素,弹栈失败");
return null;
}
}
}
class StackTest{
public static void main(String[] args) {
MyStack myStack = new MyStack(new String[8]);
myStack.push("张三");
myStack.pop();
MyStack myStack1 = new MyStack(new Integer[23]);
myStack1.push(23);
myStack1.pop();
MyStack myStack2 = new MyStack(new String[2]);
myStack2.push("xiaom");
myStack2.push("xiaohong");
myStack2.push("xiaogang");
myStack2.pop();
myStack2.pop();
myStack2.pop();
MyStack myStack3 = new MyStack();
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.push(new Object());
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
myStack3.pop();
}
}