package com.coding.basic.queue; import java.util.NoSuchElementException; /* * 链队列 * 队头和队尾2个元素唯一确定一个链队列 */ public class Queue<E> { private Node<E> first; private Node<E> last; private int size; private static class Node<E> { private E item; private Node<E> next; } public Queue(){ first = null; last = null; size = 0; } public boolean isEmpty(){ return first == null; } public int size() { return size; } public void enQueue(E data){ Node<E> oldlast = last; last = new Node<>(); last.item = data; last.next = null; if(isEmpty()){ first = last; } else { oldlast.next = last; } size++; } public E deQueue(){ if(isEmpty()){ throw new NoSuchElementException("Queue underflow"); } E item = first.item; first = first.next; size--; if(isEmpty()){ last = null; } // 注意:删除队列头元素时,仅需修改头结点指针,但是当队列中最后一个元素被删除后,队列尾指针丢失,需要对尾指针重新赋值 return item; } public static void main(String[] args){ Queue<Integer> queue = new Queue<>(); queue.enQueue(1); queue.enQueue(2); queue.enQueue(3); queue.enQueue(4); while(!queue.isEmpty()){ System.out.println(queue.deQueue()); } } }