package com.javase.进阶.数组; /** * 编写程序,使用一维数组,模拟栈数据结构 * 要求: * 1、这个栈可以存储java中的任何类型数据 * 2、在栈中提供push方法模拟压栈。(栈满了,要有提示信息) * 3、在栈中提供pop方法模拟弹栈。(栈空了,要有提示信息) * 4、编写测试程序,new栈对象,调用push和pop方法来模拟压栈弹栈的动作 * 5、假设栈的默认初始化容量是10(注意无参构造方法的编写) */ public class MyStackTest { public static void main(String[] args) { // 初始化栈,默认容量10 MyStack myStack = new MyStack(); // 开始压栈 // 采用循环压栈(压栈11次,因为栈的容量是10,多压1次出现压栈失败) for (int i = 1;i <= 11;i++){ myStack.push(new Object()); } // 栈满后,开始弹栈 // 也采用循环弹栈的方式(弹栈11次,因为栈的容量是10,多弹1次出现弹栈失败) for (int i = 1;i <= 11;i++){ myStack.pop(); } } } //栈类 class MyStack{ // 用数组来模拟栈,为了存储Java中的任何类型对象,需要使用Object[]数组 private Object[] elements; // 栈帧,永远指向栈顶部元素 private int index; // 无参构造方法 public MyStack() { // this();该语法是用来调用本类中的其他构造方法 // 默认初始化容量是10 // 对index初始化 因为0是第一个元素,始化时,栈中没有元素,所以index不等于0,也不能等于1,只能等于-1。 this(new Object[10],-1); } // 有参构造 public MyStack(Object[] elements, int index) { this.elements = elements; this.index = index; } // set and get 方法 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; } /** * 压栈的方法 * @param object 被压栈的元素 */ public void push(Object object){ //当栈针(数组下标大于等于数组最大下标值的时候,说明数组已满,也就是栈已满) if (index >= elements.length - 1){ System.out.println("栈已满,压栈失败!"); return; } index++; elements[index] = object; System.out.println("压栈" + object + "成功!栈帧指向:" + index); // 上面两行代码可以合并成下面一行代码,这里的"++"一定要在"index"之前,表示先自加1后赋值 // elements[++index] = object; } /** * 弹栈的方法 */ public void pop(){ if (index <= -1){ System.out.println("栈已空,弹栈失败!"); return; } System.out.println("成功弹栈" + elements[index] + "!栈帧指向:" + (index - 1)); // 注意:弹栈成功后,对应位置就没有元素了,所以应给一个null elements[index] = null; // 弹栈成功后栈针下移一位 index--; } }
使用一维数组模拟栈数据结构
于 2022-12-05 07:57:32 首次发布