Queue的实现
队列是一种常用的先进先出结构,就像排队购票,本文实现—初始化队列为null,当第一个元素入队,队头和队尾重叠,以后入队则将队尾向后推,出队则将队头向后推,也可以采用循环队列实现,可以有效利用空间。
功能描述
入队enqueue和出队dequeue。
代码实现
package com.yam.base;
/**
* 队列实现(使用链表实现)
* @author: Ympery
* @date: 2017/3/15 14:15.
*/
public class MyQueue<AnyType> {
private Node first; // 队头
private Node last; // 队尾
private int theSize; // 队列大小
/*public MyQueue() {
theSize = 0;
last = new Node(null, null);
first = last;
}*/
/**
* 队列中的节点
*/
private class Node {
public Node(Node n, AnyType d) {
next = n;
data = d;
}
Node next;
AnyType data;
}
public int size() { return theSize; }
// 也可以使用null == first
public boolean isEmpty() { return 0 == theSize; }
/**
* 入队
* @param data
*/
public void enqueue(AnyType data) {
Node oldLast = last;
last = new Node(null, data);
if (isEmpty()) first = last;
else oldLast.next = last;
theSize++;
}
/**
* 出队
* @return
*/
public AnyType dequeue() {
AnyType value = first.data;
first = first.next;
if (isEmpty()) last = null;
theSize--;
return value;
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
char c = 'a';
MyQueue<Character> queue = new MyQueue<>();
for (int i = 0; i < 15; i++)
queue.enqueue(c++);
System.out.println("当前大小:" + queue.size());
for (;!queue.isEmpty();)
System.out.print(queue.dequeue() + " ");
System.out.println("\n当前大小:" + queue.size());
}
}