//定义一个双向链表 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(); } }