队列的简单实现(二)

来源:互联网 发布:淘宝规蜜入口在哪里 编辑:程序博客网 时间:2024/05/22 08:28

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

代码如下:

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队列已空,无法出队列队列已空,无法出队列队列已空,无法出队列


原创粉丝点击