栈是一种数据结构
压栈:将元素放入栈中
弹栈:将元素移除栈中
栈帧:指向栈顶元素
栈顶:栈最上面的那个元素
特点:先进后出,后进先出
package com.tqw_zg.stack; //提供一个数组来存储栈中的元素 //Object[] object; // 栈帧(永远指向栈顶部的元素) // 每加1个元素,栈帧+1 // 每减1个元素,栈帧-1 // 构造方法 // 构造方法是不是应该给一维数组一个初始化容量。 public class MyStack {// 栈类 private Object[] object;//数组,模拟栈 private int index = -1;//栈帧 public MyStack() {//无参构造方法,直接赋数组大小为10 this.object = new Object[10];//创建大小为10的Object类的数组,课储存各种类型的数据 } public MyStack(int num) {//有参构造方法,传入一个数,作为数组的大小 this.object = new Object[num];//创建大小为num的Object类的数组,课储存各种类型的数据 } //setter and getter public Object[] getObject() { return object; } public void setObject(Object[] object) { this.object = object; }
// push方法(push方法压栈) // 压栈表示栈中多一个元素。 // 但是栈如果已满,压栈失败。 // 这个方法的参数以及返回值类型自己定义。 public void push(Object obj) { if (getObject().length - 1 <= index) { System.out.println("压栈失败"); } else { object[++index] = obj;//0,1,2,3,4,5,6 System.out.println("压栈成功"); if (getObject().length - 1 == index) { System.out.println("栈满了"); } } }
// pop方法(pop方法弹栈) // 弹栈表示栈中少一个元素。 // 但是栈如果已空,弹栈失败。 // 这个方法的参数以及返回值类型自己定义。 public void pop() { if (index == -1) { System.out.println("弹栈失败"); } else { object[index--] = null; System.out.println("弹栈成功"); if (index == -1) { System.out.println("栈空了"); } } }
public class MyStack {// 栈类 private Object[] object;//数组,模拟栈 private int index = -1;//栈帧 public MyStack() {//无参构造方法,直接赋数组大小为10 this.object = new Object[10];//创建大小为10的Object类的数组,课储存各种类型的数据 } public MyStack(int num) {//有参构造方法,传入一个数,作为数组的大小 this.object = new Object[num];//创建大小为num的Object类的数组,课储存各种类型的数据 } //setter and getter public Object[] getObject() { return object; } public void setObject(Object[] object) { this.object = object; } //压栈 public void push(Object obj) { if (getObject().length - 1 <= index) { System.out.println("压栈失败"); } else { object[++index] = obj;//0,1,2,3,4,5,6 System.out.println("压栈成功"); if (getObject().length - 1 == index) { System.out.println("栈满了"); } } } //弹栈 public void pop() { if (index == -1) { System.out.println("弹栈失败"); } else { object[index--] = null; System.out.println("弹栈成功"); if (index == -1) { System.out.println("栈空了"); } } } }
package com.tqw_zg.stack; public class Test { public static void main(String[] args) { MyStack myStack=new MyStack(7); myStack.push("i"); myStack.push(" love"); myStack.push(" tqw "); myStack.push(3); myStack.push("b"); myStack.push(4); myStack.push("c"); myStack.push(1); for(int i=0;i<7;i++) { System.out.print(myStack.getObject()[i]); } System.out.println(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); } }
压栈成功 压栈成功 压栈成功 压栈成功 压栈成功 压栈成功 压栈成功 栈满了 压栈失败 i love tqw 3b4c 弹栈成功 弹栈成功 弹栈成功 弹栈成功 弹栈成功 弹栈成功 弹栈成功 栈空了 弹栈失败 弹栈失败 Process finished with exit code 0
1、在创建数组时必须先给定数组的大小;
2、Object类的数组可以输入任何类型的数据;
3、一般栈帧初始化为-1