用一维数组模拟栈数据结构的压栈弹栈

//创建栈类 用一维数组模拟栈数据结构
public class Stack {
    Object[] obj;//属性 栈,模拟栈的容量,由构造方法赋值容量大小。objec可以存储任何数据类型
    int index;//模拟栈帧,栈帧等于obj容量时,表示栈满并提示,,当栈帧为0时,表示栈空并提示

    public Stack() {
    }

    public Stack(Object[] obj, int index) {
        this.obj = obj;
        this.index = index;
    }

    public void push(Object[] obj) {//push方法模拟压栈,栈满要提示,压栈是顺序遍历...这里用object可以传入任何类型数组
        for (int i = 0; i < obj.length; i++) {
            index++;
            System.out.print(obj[i] + "  ");
            if (index == this.obj.length) {
                System.out.println("栈已满,等待弹栈");
                return;
            }
        }
    }

    public void pop(Object[] obj) {//pop方法模拟弹栈,栈空提示,弹栈后进先出,采用倒序遍历
        for (int i = this.obj.length - 1; i >= 0; i--) {
            index--;
            System.out.print(obj[i] + "  ");
            if (index == 0) {
                System.out.println("栈已空");
                return;
            }
        }
    }
}

一、先创建一个栈类,提供两个属性

  1. Object【】 obj 可以模拟栈的容量大小,并且Object可以存储任何数据类型的一维数组
  2. int index 可以模拟栈帧,赋值0的时候模拟压栈,赋值obj.length的模拟弹栈
  3. 提供push和pop方法分别模拟压栈和弹栈,两个方法都差不多,区别 在于栈的特点是先进后出,后进先出
    因此压栈可以用顺序遍历模拟,弹栈可以用倒叙遍历模拟。这里讲一下压栈,弹栈类似如此
    用for循环遍历,判断条件为i=obj.length,这样可以限制压栈的元素个数不超过给定的栈容量。
    元素输出一次,判断一次index大小是否等于给定的栈容量大小,当相当是,输出栈满,并return终止。

二、
创建测试类对压栈弹栈进行测试,这里就采用静态初始化做个例子

public class Test {
    public static void main(String[] args) {
        Stack s1=new Stack(new Object[10],0);//调用构造方法模拟压栈,此时栈帧为0
        Object[] a={1,2,3,4,5,6,7,8,9,10,1,1,1,1,1,1};
        s1.push(a);

        Object[] b=new Object[10];
        System.arraycopy(a,0,b,0,10);
        s1.pop(b);
    }
}
  1. 调用构造方法,模拟栈容量为10,栈帧为0的状态
  2. 定一个一维数组,给16个元素
  3. 调用压栈方法,经过测试,当遍历到10时,栈帧为9,指向栈顶部,表示栈已满。
    输出1 2 3 4 5 6 7 8 9 10 栈已满,等待弹栈
    4.在调用弹栈方法前,为了继续使用栈中的数组,可以新建一个数组,并赋值与栈相同的容量大小,将其copy进新数组中,这样就可以模拟弹栈了。

以上就是简单的一维数组模拟栈数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值