java写一个会实现堆栈功能的程序

java写一个能实现堆栈功能的程序
数组实现的堆栈:ArrayStack.java
public class ArrayStack {
    Object[] m_elements;
    int m_size;

    public ArrayStack(int len) {
        m_elements = new Object[len];
        m_size = 0;
    }

    public ArrayStack() {
        this(50);
    }

    //  insert onto stack
    public void push(Object element) {
        m_elements[m_size] = element;
        m_size++;
    }

    // return and remove the top element
    public Object pop() {
        if (!this.isEmpty()) {
            Object obj = m_elements[m_size - 1];
            m_elements[m_size - 1] = null;
            m_size--;

            return obj;
        } else {
            return null;
        }
    }

    // return the top element
    public Object top() {
        if (!this.isEmpty()) {
            return m_elements[m_size - 1];
        } else {
            return null;
        }
    }

    // return 1   --> is empty
    // return 0   --> is not empty
    public boolean isEmpty() {
        return this.size() == 0;
    }

    public int size() {
        return m_size;
    }
}

使用链表实现(单链表) :
public class Stacklist {
    Node m_header;

    int m_size;

    public ListStack() {
        m_header = null;
        m_size = 0;
    }

    public void push(Object value) {

        m_header = new Node(value, m_header);

    }

    public Object pop() {
        if (!this.isEmpty()) {
            throw new RuntimeException("Stack underflow");
        }

        Object obj = m_header.element;

        m_header = m_header.next;

        return obj;
    }

    //  return reference to most recently added elemenet
    public Object peek() {
        if (!this.isEmpty()) {
            throw new RuntimeException("Stack underflow");
        }

        return m_header.element;
    }

    public boolean isEmpty() {
        return this.size() == 0;
    }

    //return the number of the queue's elements;
    public int size() {
        return m_size;
    }
}

链表的需要用到一个结点类 Node.java 代码如下
public class Node {
    Object element;
    Node next;
    
    public Node(Object theElement) {
        this(theElement, null);
    }

    public Node(Object theElement, Node n) {
        element = theElement;
        next = n;
    }

    public Object getElement() {
        return element;
    }

    public void setElement(Object element) {
        this.element = element;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }
}