我的个人博客
链表实现队列的接口
Queue.java
1 2 3 4 5 6 7 8
public interface Queue <E > { int getSize () ; boolean isEmpty () ; void enqueue (E e) ; E dequeue () ; E getFront () ; }
链表实现队列操作执行结果
链表实现队列操作(完整代码)
LinkedListQueue.java(实现队列的操作)
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
public class LinkedListQueue <E > implements Queue <E > { private class Node { public E e; public Node next ; public Node (E e, Node next) { this .e = e; this .next = next; } public Node (E e) { this (e, null );} public Node () {this (null , null );} @Override public String toString () { return e.toString(); } } private Node head, tail; private int size; public LinkedListQueue () { head = null ; tail = null ; size = 0 ; } @Override public int getSize () { return size; } @Override public boolean isEmpty () { return size == 0 ; } @Override public void enqueue (E e) { if (tail == null ){ tail = new Node(e); head = tail; } else { tail.next = new Node(e); tail = tail.next; } size ++; } @Override public E dequeue () { if (isEmpty()) throw new IllegalArgumentException("Cannot dequeue from an empty queue." ); Node retNode = head; head = head.next; retNode.next = null ; if (head == null ) tail = null ; size --; return retNode.e; } @Override public E getFront () { if (isEmpty()) throw new IllegalArgumentException("Queue is empty" ); return head.e; } @Override public String toString () { StringBuilder res = new StringBuilder(); res.append("Queue: front " ); Node cur = head; while (cur != null ){ res.append((cur + "->" )); cur = cur.next; } res.append("NULL tail" ); return res.toString(); } public static void main (String[] args) { LinkedListQueue<Integer> queue = new LinkedListQueue<>(); for (int i = 0 ; i < 10 ; i ++){ queue.enqueue(i); System.out.println(queue); if (i % 3 == 2 ){ queue.dequeue(); System.out.println(queue); } } } }
我对比了一下数组队列、循环数组队列、链表实现队列的时间输出结果截图
明显循环数组队列和列表实现队列的时间相当,数组队列最差。相差100倍左右
测试时间代码
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
import java.util.Random;public class Main { private static double testQueue (Queue<Integer> q, int opCount) { long startTime = System.nanoTime(); Random random = new Random(); for (int i = 0 ; i < opCount; i ++) q.enqueue(random.nextInt(Integer.MAX_VALUE)); for (int i = 0 ; i < opCount ; i ++) q.dequeue(); long endTime = System.nanoTime(); return (endTime - startTime) / 100000000.0 ; } public static void main (String[] args) { int opCount = 100000 ; LoopQueue<Integer> loopQueue = new LoopQueue<>(); double time1 = testQueue(loopQueue, opCount); System.out.println("LoopQueue , time: " + time1 + "s" ); ArrayQueue<Integer> arrayQueue = new ArrayQueue<>(); double time2 = testQueue(arrayQueue, opCount); System.out.println("arrayQueue , time: " + time2 + "s" ); LinkedListQueue<Integer> linkedListQueue = new LinkedListQueue<>(); double time3 = testQueue(linkedListQueue, opCount); System.out.println("LinkedListQueue , time: " + time3 + "s" ); } }
FROM:gylq.gitee Author:孤桜懶契
免责声明: 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/729943.html
复制链接
复制链接
左青龙
微信扫一扫
右白虎
微信扫一扫
评论