链表实现队列
* 结点类的声明
* @author MrLBZ
* @param
*/public class LinearNode { private LinearNode next; private T element; public LinearNode() {
next = null;
element = null;
} public LinearNode(T elem) {
next = null;
element = elem;
} public LinearNode getNext() { return next;
} public void setNext(LinearNode node) {
next = node;
} public T getElement() { return element;
} public void setElement(T elem) {
element = elem;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package ds.java.ch05.queueImpl;public class EmptyCollectionException extends RuntimeException{
/**
* Sets up this exception with an appropriate message.
*/
public EmptyCollectionException (String collection)
{ super ("The " + collection + " is empty.");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package ds.java.ch05.queueImpl;/**
* @author LbZhang
* @version 创建时间:2015年11月16日 下午7:30:59
* @description 链表实现队列
*/public class LinkedQueue implements QueueADT {
private int count; private LinearNode head, tail; // 首尾声明
/**
* 初始化队列
*/
public LinkedQueue() {
count = 0;
head = tail = null;
} @Override
public void enqueue(T elem) {
LinearNode node = new LinearNode(elem); if (isEmpty()) {// /如果是空的话初始化头结点
head = node;
} else {
tail.setNext(node);
}
tail = node;// /新结点的next不需要显式的设置 因为在new一个新结点的时候已经设置完毕
count++;
} @Override
public T dequeue() throws EmptyCollectionException{ if (isEmpty()) { throw new EmptyCollectionException("queue");
}
T result = head.getElement();
head = head.getNext();
count--; if (isEmpty()) {
tail = null;// /如果栈变成了空栈
} return result;
} @Override
public T first() throws EmptyCollectionException{ if (isEmpty()) throw new EmptyCollectionException("queue"); return head.getElement();
} @Override
public boolean isEmpty() { return (count == 0);
} @Override
public int size() { return count;
} @Override
public String toString() {
String result = "";
LinearNode current = head; while (current != null) {
result = result + (current.getElement()).toString() + "\n";
current = current.getNext();
} return result;
}
}