123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package ch1.sec3;
- import java.util.Iterator;
- public class LinkQueue<Item> implements Iterable<Item> {
- private Node head;
- private Node tail;
- private int size;
- @Override
- public LinkQueueIterator iterator() {
- return new LinkQueueIterator();
- }
- public LinkQueue() {
- head = null;
- tail = null;
- size = 0;
- }
- public void enqueue(Item item) {
- if (isEmpty()) {
- head = new Node(item, null);
- tail = head;
- } else {
- tail.next = new Node(item, null);
- tail = tail.next;
- }
- size++;
- }
- public Item dequeue() {
- if (isEmpty()) {
- return null;
- }
- Item item = head.value;
- head = head.next;
- if (size() == 1) {
- tail = tail.next;
- }
- size--;
- return item;
- }
- public boolean isEmpty() {
- return size == 0;
- }
- public int size() {
- return size;
- }
- public static void main(String[] args) {
- LinkQueue<Integer> linkQueue = new LinkQueue<>();
- System.out.println(linkQueue.isEmpty());
- linkQueue.enqueue(1);
- linkQueue.enqueue(2);
- linkQueue.enqueue(3);
- for (Integer i : linkQueue) {
- System.out.println(i);
- }
- System.out.println(linkQueue.size());
- while (!linkQueue.isEmpty()) {
- System.out.println(linkQueue.dequeue());
- }
- }
- private class Node {
- private Item value;
- private Node next;
- public Node(Item value, Node next) {
- this.value = value;
- this.next = next;
- }
- }
- private class LinkQueueIterator implements Iterator<Item> {
- private Node current;
- public LinkQueueIterator() {
- current = head;
- }
- @Override
- public boolean hasNext() {
- return current != null;
- }
- @Override
- public Item next() {
- Item item = current.value;
- current = current.next;
- return item;
- }
- }
- }
|