栈的实现

AbstactStack类

public abstract class AbstractStack<E> {
    public abstract void pop();
    public abstract void push(E e);
    public abstract E top();
}

用顺序表实现栈

public class ArrayStack<E> extends AbstractStack<E>{
    private Object[] arr=new Object[20];
    private int size=0;

    @Override
    public void pop() {
        size--;
    }

    @Override
    public void push(E e) {
        if(size>=arr.length){
            Object[] arr=new Object[this.arr.length+10];
            for (int i = 0; i < this.arr.length; i++) arr[i]=this.arr[i];
            this.arr=arr;
        }
        arr[size++]=e;
    }

    @Override
    public E top() {
        return (E) arr[size-1];
    }
}

用链表实现栈

public class LinkedStack<E> extends AbstractStack<E> {

    static class Node<E>{
        private E e;
        private Node<E> next;
        public Node(){};
        public Node(E e){
            this.e=e;
        }
    }

    private Node<E> head=new Node<>();
    private int size=0;

    @Override
    public void pop() {
        size--;
    }

    @Override
    public void push(E e) {
        Node node=head;
        for (int i = 0; i < size; i++) node=node.next;
        node.next=new Node<>(e);
        size++;
    }

    @Override
    public E top() {
        Node node=head;
        for (int i = 0; i < size; i++) node=node.next;
        return (E) node.e;
    }
}

 

posted @ 2022-01-18 22:05  Saryon  阅读(33)  评论(0)    收藏  举报