您的位置:首页 > 编程语言 > Java开发

Java通过链表实现队列

2016-08-22 09:22 423 查看
class LinkedQueue<T> {
/**
* 队列大小,由构造函数初始化
*/
private int maxSize;

/**
* 队头
*/
private Node front = null;

/**
* 队尾
*/
private Node rear = null;

/**
* 队列实际元素个数
*/
private int nItems;

/**
* 初始化队列,并指定队列长度
*
* @param maxSize
*/
public LinkedQueue(int maxSize) {
this.maxSize = maxSize;
front = null;
rear = null;
this.nItems = 0;
}

/**
* 讲一个数据放入队列
*
* @param data
*/
public void enqueue(T data) {
Node node = new Node(data);
if (isEmpty()) {
front = node;
front.next = null;
rear = node;
rear.pre = null;
nItems++;
return;
}
if (size() == 1) {
rear = node;
front.next = rear;
rear.pre = front;
nItems++;
return;
}
if (isFull()) {
System.out.print("超过队列已满,无法入队");
return;
}
node.pre = rear;
rear.next = node;
rear = node;
nItems++;
}

/**
* 将数据出队
*
* @return
*/
public T dequeue() {
Node temp = null;
if (isEmpty()) {
System.out.println("队列已空,无法出队");
return null;
}
if (size() == 1) {
temp = front;
front = null;
rear = null;
nItems--;
return temp.data;
}
if (size() == 2) {
temp = front;
front = rear;
front.next = null;
rear.pre = null;
nItems--;
return temp.data;
}
temp = front;
front = front.next;
nItems--;
return temp.data;
}

/**
* 判断队列是否为空
*
* @return
*/
public boolean isEmpty() {
return nItems == 0;
}

/**
* 判断队列是否已满
*
* @return
*/
public boolean isFull() {
return nItems == maxSize;
}

/**
* 获取队列的实际数据个数
*
* @return
*/
public int size() {
return nItems;
}

/**
* 将数据封装成节点
*
* @author John
*
*/
private class Node {
T data;
Node next;
Node pre;

public Node(T data) {
this.data = data;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: