美文网首页
Java实现栈

Java实现栈

作者: sushengren | 来源:发表于2017-09-05 11:00 被阅读0次

    数组栈:压栈、出栈、返回栈顶元素

    public interface StackADT<T> {
    
        /**
         * 压栈
         * */
        public void push(T element);
    
        /**
         * 出栈
         * */
        public T pop();
    
        /**
         * 返回栈顶元素
         * */
        public T peek();
    
        public boolean isEmpty();
    
        public int size();
    
    }
    
    public class ArrayStack<T> implements StackADT<T> {
    
        private Object[] data = null;
        private Integer maxSize = 0;
        private Integer top = -1;
    
        ArrayStack() {
            this(10);
        }
    
        ArrayStack(int initialSize) {
            if (initialSize >= 0) {
                this.maxSize = initialSize;
                data = new Object[initialSize];
                top = -1;
            } else {
                throw new RuntimeException("初始化大小不能小于0:" + initialSize);
            }
        }
    
        @Override
        public void push(T element) {
            if (top != maxSize - 1)
                data[++top] = element;
            else
                throw new RuntimeException("栈已满,压栈失败!");
        }
    
        @Override
        public T pop() {
            if (top != -1)
                return (T) data[top--];
            else
                throw new RuntimeException("栈为空!");
        }
    
        @Override
        public T peek() {
            if (top != -1)
                return (T) data[top];
            else
                throw new RuntimeException("栈为空!");
        }
    
        @Override
        public boolean isEmpty() {
            return top != -1 ? false : true;
        }
    
        @Override
        public int size() {
            return top + 1;
        }
    
        @Override
        public String toString() {
            return top != -1 ? "容量=" + maxSize + "\n栈内容=" + Arrays.toString(data)
                    + "\n栈顶元素=" + peek() : "栈为空!";
        }
    
    }
    

    链式栈:压栈、出栈、返回栈顶元素

    public class LinkStack<T> implements StackADT<T> {
    
        private class Node {
    
            T t;
            Node next;
    
            public Node(T t, Node next) {
                this.t = t;
                this.next = next;
            }
    
        }
    
        private Node top;
        private int size;
    
        public LinkStack() {
            top = null;
        }
    
        @Override
        public void push(T element) {
            top = new Node(element, top);
            size++;
        }
    
        @Override
        public T pop() {
            if (isEmpty()) {
                throw new RuntimeException("栈为空!");
            } else {
                Node value = top; // 得到栈顶元素
                top = top.next; // 让top引用指向原栈顶元素的下一个元素
                value.next = null; // 释放原栈顶元素的next引用
                size--;
                return value.t;
            }
        }
    
        @Override
        public T peek() {
            if (isEmpty())
                throw new RuntimeException("栈为空!");
            return top.t;
        }
    
        @Override
        public boolean isEmpty() {
            return size == 0;
        }
    
        @Override
        public int size() {
            return size;
        }
    
        @Override
        public String toString() {
            return isEmpty() ? "栈为空!" : "LinkStack [top=" + top.t + ", size="
                    + size + "]";
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Java实现栈

          本文链接:https://www.haomeiwen.com/subject/oclujxtx.html