队列的简单实现(二)

上文队列的简单实现(一)简单的实现了顺序队列结构,这次是实现简单的链式结构。

代码如下:

package ds.queue;

import ds.linkedlist.LinkedList;

public class Queue2<E> {

	private LinkedList<E> head = null;// 指向队列头的引用
	private LinkedList<E> objData = null;// 用于存放队列数据的链表
	private int nLen = 0;// 用于表示队列的长度

	Queue2() {
		objData = new LinkedList<E>();
	}

	/**
	 * 获取队列长度
	 * 
	 * @param queue
	 *            队列的引用
	 * @return 队列长度
	 */
	int getSize(Queue2<E> queue) {
		return queue.nLen;
	}

	/**
	 * 判断队列是否为空
	 * 
	 * @param queue
	 *            队列的引用
	 * @return 若队列空,则返回true,否则返回false
	 */
	boolean isEmpty(Queue2<E> queue) {
		return (getSize(queue) == 0);
	}

	/**
	 * 清空队列,但不释放内存
	 * 
	 * @param queue
	 *            队列的引用
	 */
	void clear(Queue2<E> queue) {
		queue.head = null;
		queue.nLen = 0;
	}

	/**
	 * 清空队列,且释放内存
	 * 
	 * @param queue
	 *            队列的引用
	 */
	void free(Queue2<E> queue) {
		if (queue.head == null) {
			return;
		} else {
			queue.head = queue.objData.delete(queue.head,
					queue.objData.getHeadInfo(queue.head));
			free(queue);
		}
		clear(queue);
	}

	/**
	 * 入队列操作
	 * 
	 * @param queue
	 *            队列的引用
	 * @param eData
	 *            要压入队列数据
	 */
	void enter(Queue2<E> queue, E eData) {
		queue.head = queue.objData.addEnd(queue.head, eData);
		queue.nLen++;
		System.out.println(eData + "已入队列");
	}

	/**
	 * 出队列操作
	 * 
	 * @param queue
	 *            队列的引用
	 * @return 队列头的数据
	 */
	E out(Queue2<E> queue) {
		E dataTmp = null;
		if (isEmpty(queue)) {
			System.out.println("队列已空,无法出队列");
			return null;
		}
		dataTmp = queue.objData.getHeadInfo(queue.head);
		queue.head = queue.objData.delete(queue.head, dataTmp);
		queue.nLen--;
		System.out.println(dataTmp + "已出队列");
		return dataTmp;
	}

	/**
	 * 读取队列头元素(不出队列)
	 * 
	 * @param queue
	 *            队列的引用
	 * @return 队列头的元素
	 */
	E peek(Queue2<E> queue) {
		E dataTmp = null;
		if (isEmpty(queue)) {
			System.out.println("队列已空,无法读取队列头的元素");
			return null;
		}
		dataTmp = queue.objData.getHeadInfo(queue.head);
		System.out.println(dataTmp + "已读取");
		return dataTmp;
	}
}

测试代码:

package ds.queue;

import java.util.Random;

public class Simple2 {

	public static void main(String[] args) {
		System.out.println("----新建空队列----");
		Queue2<Integer> queue = new Queue2<Integer>();
		System.out.println("队列的现有长度:" + queue.getSize(queue));

		System.out.println("----测试入队列操作----");
		Random random = new Random();
		int temp = 0;
		for (int i = 0; i < 6; i++) {
			temp = random.nextInt(100);
			System.out.println("将" + temp + "压入队列");
			queue.enter(queue, temp);
		}
		System.out.println("队列的现有长度:" + queue.getSize(queue));

		System.out.println("----测试读取队列顶操作----");
		queue.peek(queue);
		queue.peek(queue);
		System.out.println("队列的现有长度:" + queue.getSize(queue));

		System.out.println("----测试出队列操作----");
		for (int i = 0; i < 3; i++) {
			queue.out(queue);
		}
		System.out.println("队列的现有长度:" + queue.getSize(queue));
		
		System.out.println("----测试清空队列操作----");
		queue.free(queue);
		System.out.println("队列的现有长度:" + queue.getSize(queue));
		for (int i = 0; i < 3; i++) {
			queue.out(queue);
		}
	}
}

测试结果:

----新建空队列----
队列的现有长度:0
----测试入队列操作----
将87压入队列
87已入队列
将40压入队列
40已入队列
将1压入队列
1已入队列
将98压入队列
98已入队列
将45压入队列
45已入队列
将94压入队列
94已入队列
队列的现有长度:6
----测试读取队列顶操作----
87已读取
87已读取
队列的现有长度:6
----测试出队列操作----
87已出队列
40已出队列
1已出队列
队列的现有长度:3
----测试清空队列操作----
队列的现有长度:0
队列已空,无法出队列
队列已空,无法出队列
队列已空,无法出队列


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值