Bootstrap

栈和队列的双向链表实现

//定义一个双向链表
public static class Node<T>{
    public T value;
    public Node<T> last;
    public Node<T> next;

    public Node(T data){
        value = data;
    }
}
//定义实现形式
public static class DoubleEndQueue<T>{
    public Node<T> head;
    public Node<T> tail;
    //头部插入
    public void addFromHead(T value){
        Node<T> cur = new Node<T>(value);
        if(head == null) {
            head  =cur;
            tail  =cur;
        }else{
            cur.next = head;
            head.last = cur;
            head =cur;
        }
    }
    //尾部插入
    public void addFromBottom(T value){
        Node<T> cur = new Node<T>(value);
        if(tail == null){
            head = cur;
            tail = cur;
        }else{
            cur.next  = tail;
            tail.next  = cur;
            tail =cur;
        }
    }
    //头部出去
    public T popFromHead(){
        if(head == null){
            return null;
        }
        Node<T> cur = head;
        if(head == tail){
            head =null;
            tail =null;
        }else{
            head =head.next;
            cur.next =null;
            head.last = null;
        }
        return cur.value;
    }
    //尾部出去
    public T popFromBottom(){
        if(tail ==null){
            return null;
        }
        Node<T> cur =tail;
        if(head == null){
            head=null;
            tail=null;
        }else{
            tail = tail.last;
            tail.next = null;
            cur.last = null;
        }
        return cur.value;
    }

    public boolean isEmpty(){
        return head == null;
    }
}
//定义栈(头部进头部出即最后进的最先出)
public static class MyStack<T>{
    private DoubleEndQueue<T> queue;
    public MyStack(){
        queue = new DoubleEndQueue<T>();
    }
    public void push(T value){
        queue.addFromHead(value);
    }
    public T pop(){
        return queue.popFromHead();
    }
    public boolean isEmpty(){
        return queue.isEmpty();
    }
}
//定义队列(头部进尾部出即最先进的最先出)
public static class MyQueue<T>{
    private DoubleEndQueue<T> queue;
    public MyQueue(){
        queue = new DoubleEndQueue<T>();
    }
    public void push(T value){
        queue.addFromHead(value);
    }
    public T poll(){
        return queue.popFromBottom();
    }
    public boolean isEmpty(){
        return queue.isEmpty();
    }
}
;