LinkQueue.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package ch1.sec3;
  2. import java.util.Iterator;
  3. public class LinkQueue<Item> implements Iterable<Item> {
  4. private Node head;
  5. private Node tail;
  6. private int size;
  7. @Override
  8. public LinkQueueIterator iterator() {
  9. return new LinkQueueIterator();
  10. }
  11. public LinkQueue() {
  12. head = null;
  13. tail = null;
  14. size = 0;
  15. }
  16. public void enqueue(Item item) {
  17. if (isEmpty()) {
  18. head = new Node(item, null);
  19. tail = head;
  20. } else {
  21. tail.next = new Node(item, null);
  22. tail = tail.next;
  23. }
  24. size++;
  25. }
  26. public Item dequeue() {
  27. if (isEmpty()) {
  28. return null;
  29. }
  30. Item item = head.value;
  31. head = head.next;
  32. if (size() == 1) {
  33. tail = tail.next;
  34. }
  35. size--;
  36. return item;
  37. }
  38. public boolean isEmpty() {
  39. return size == 0;
  40. }
  41. public int size() {
  42. return size;
  43. }
  44. public static void main(String[] args) {
  45. LinkQueue<Integer> linkQueue = new LinkQueue<>();
  46. System.out.println(linkQueue.isEmpty());
  47. linkQueue.enqueue(1);
  48. linkQueue.enqueue(2);
  49. linkQueue.enqueue(3);
  50. for (Integer i : linkQueue) {
  51. System.out.println(i);
  52. }
  53. System.out.println(linkQueue.size());
  54. while (!linkQueue.isEmpty()) {
  55. System.out.println(linkQueue.dequeue());
  56. }
  57. }
  58. private class Node {
  59. private Item value;
  60. private Node next;
  61. public Node(Item value, Node next) {
  62. this.value = value;
  63. this.next = next;
  64. }
  65. }
  66. private class LinkQueueIterator implements Iterator<Item> {
  67. private Node current;
  68. public LinkQueueIterator() {
  69. current = head;
  70. }
  71. @Override
  72. public boolean hasNext() {
  73. return current != null;
  74. }
  75. @Override
  76. public Item next() {
  77. Item item = current.value;
  78. current = current.next;
  79. return item;
  80. }
  81. }
  82. }