首页 > 代码库 > Java数据结构系列之——队列(3):队列的链式存储结构及其实现

Java数据结构系列之——队列(3):队列的链式存储结构及其实现

package queue.linkQueue;

public class Node {
	// 数据域
	Object element;
	// 指针域
	Node next;

	// 头结点初始化
	public Node(Node next) {
		this.next = next;
	}

	// 非头结点初始化
	public Node(Object element, Node next) {
		this.element = element;
		this.next = next;
	}
}

***************************************************************************************

package queue.linkQueue;

public class LinkQueue {
	Node front;// 头结点
	Node rear;// 尾结点
	int size;// 队列大小

	// 初始化一个空队列
	public LinkQueue() {
		front = new Node(null);
		rear = front;
		size = 0;
	}

	// 队列的大小
	public int size() {
		return size;
	}

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

	// 入队列
	public void enQueue(int data) {
		Node node = new Node(data, null);
		rear.next = node;
		
		rear=node;
		
		size++;
	}

	// 出队列
	public Object deQueue() {
		if (isEmpty()) {
			throw new IndexOutOfBoundsException("队列为空");
		}

		Node node = front.next;// 得到以一个结点
		front.next = node.next;// 将头结点的第一个结点指向第一个结点的下一个结点

		if (node == rear) {// 如果队列中只有一个元素,则删除后将rear指向头结点
			rear = front;
		}
		size--;
		
		return node.element;
	}

	// 得到对头元素,不删除
	public Object getFront() {
		if (isEmpty()) {
			return null;
		} else {
			return front.next.element;
		}
	}

	// 打印队列中的元素
	public void traverse() {
		if (isEmpty()) {
			System.out.println("null");
		} else {
			Node current = front.next;// 当前结点
			for (Node node = current; node != null; node = node.next) {
				System.out.print(node.element + " ");
			}
		}
		System.out.println();
	}
}


Java数据结构系列之——队列(3):队列的链式存储结构及其实现