使用一维数组模拟栈数据结构

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--;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值