队列是一种只允许在表的前端进行删除操作,而在表的后端进行插入操作的线性数据结构
我们可以利用链表来实现队列,具体实现代码如下:
import java.util.NoSuchElementException;
/**
* 用链表实现队列
* @author Victor Gong
*
* @param <Item> 队列中元素类型
*/
public class LinkedQueue<Item> {
private Node first; //头结点
private Node last; //末结点
private int n; //队列大小
private class Node{
private Node next;
private Item item;
public Node(Item item) {
super();
this.item = item;
}
}
public LinkedQueue() {
super();
first = null;
last = null;
n = 0;
}
/**
*
* @return 队列的大小
*/
public int size() {
return n;
}
/**
*
* @return 队列是否为空
*/
public boolean isEmpty() {
return n == 0;
}
/**
* 入队列
* @param item 要入队列的元素
*/
public void enquque(Item item) {
Node oldLast = last;
last = new Node(item);
if (first == null) {
first = last;
}else {
oldLast.next = last;
}
last.next = null;
n++;
}
/**
* 将元素移出队列并返回它的值
* @return 出队列的元素
*/
public Item dequeue() {
if (isEmpty()) {
throw new NoSuchElementException("队列为空");
}
Item item = first.item;
first = first.next;
n--;
return item;
}
/**
*
* @return 最新添加到队列的元素
*/
public Item peek() {
if (isEmpty()) {
return null;
}
return first.item;
}
@Override
public String toString() {
// TODO Auto-generated method stub
StringBuilder s = new StringBuilder();
for (Node x = first; x != null; x = x.next) {
s.append(x.item + " ");
}
return s.toString();
}
public static void main(String[] args) {
LinkedQueue<Integer> queue = new LinkedQueue<Integer>();
System.out.println(queue.isEmpty());
queue.enquque(1);
queue.enquque(2);
queue.enquque(3);
queue.enquque(4);
queue.enquque(5);
System.out.println(queue.isEmpty());
System.out.println(queue.toString());
System.out.println(queue.peek());
System.out.println(queue.size());
queue.dequeue();
System.out.println(queue.toString());
System.out.println(queue.peek());
System.out.println(queue.size());
}
}