如何用Java实现一个简易的栈(Stack)

如何用Java实现一个简易的栈(Stack)

栈是一种典型的“后进先出(LIFO)”的数据结构,下面我们来看下如何使用Java编写一个简易的栈

1.接口 IStack
public interface IStack {

    //置空
    void clear();

    //判空
    boolean isEmpty();

    //返回栈中元素个数
    int length();

    //读取栈顶元素
    Object peek();

    //入栈
    void push(Object o);

    //返回栈顶元素 出栈
    Object pop();
}

2.实现类 MyStack
public class MyStack implements IStack {

    public Object[] elem;//对象数组

    public int top = -1;//默认栈顶元素位置 注意为0和为-1的区别

    public int MAX_SIZE = 50;//存放元素的最大数量

    public MyStack() {
        this.elem = new Object[MAX_SIZE];
    }

    public MyStack(int size) {
        if (size <= 0) {
            System.err.println("wrong size!!! using default");
        } else {
            MAX_SIZE = size;
        }
        elem = new Object[MAX_SIZE];
    }


    @Override
    public void clear() {
        top = -1;
        elem = new Object[MAX_SIZE];
    }

    @Override
    public boolean isEmpty() {
        return top == -1;
    }

    @Override
    public int length() {
        //一开始top为-1 计算长度时需要加1
        //若top为0 则不需要
        return top + 1;
    }

    @Override
    public Object peek() {
        if (top == -1) {
            return null;
        } else {
            return elem[top];
        }
    }

    @Override
    public void push(Object o) {
        if (top + 1 == MAX_SIZE) {
            System.err.println("stack is full!");
            return;
        }
        //top先加1 再把元素放在该位置 注意 ++top 和 top++ 的区别
        this.elem[++top] = o;
    }

    @Override
    public Object pop() {
        if(isEmpty()){
            System.err.println("stack has no element!");
            return null;
        }
        //先把top所在元素返回 之后top减1
        return elem[top--];
    }
}



测试类 StackTest
public class StackTest {
    public static void main(String[] args) {

        MyStack s = new MyStack(5);
        s.push("1");
        s.push("2");
        s.push("3");
        s.push("4");
        s.push("5");
        //s.push("6");//不能添加进去

        System.out.println("length is " + s.length());
        System.out.println("peek result is " + s.peek());
        System.out.println("isEmpty " + s.isEmpty());

        System.out.println("----------------------------------------------");

        Object pop = s.pop();
        System.out.println("pop result is " + pop);
        System.out.println("after pop length is " + s.length());

        System.out.println("----------------------------------------------");

        s.clear();
        System.out.println("after clear length is " + s.length());
        System.out.println("isEmpty " + s.isEmpty());
    }
}

运行结果

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值