diff --git a/clients/src/main/java/com/hithomelabs/clients/ArrayQueueClient.java b/clients/src/main/java/com/hithomelabs/clients/ArrayQueueClient.java index dca3c9f..7022367 100644 --- a/clients/src/main/java/com/hithomelabs/clients/ArrayQueueClient.java +++ b/clients/src/main/java/com/hithomelabs/clients/ArrayQueueClient.java @@ -1,9 +1,7 @@ package com.hithomelabs.clients; import com.hithomelabs.princeton1.module4.ArrayQueue; -import com.hithomelabs.princeton1.module4.ArrayStack; import com.hithomelabs.princeton1.module4.Queue; -import com.hithomelabs.princeton1.module4.Stack; public class ArrayQueueClient { public static void main(String[] args) { diff --git a/clients/src/main/java/com/hithomelabs/clients/LinkedQueueClient.java b/clients/src/main/java/com/hithomelabs/clients/LinkedQueueClient.java new file mode 100644 index 0000000..008742c --- /dev/null +++ b/clients/src/main/java/com/hithomelabs/clients/LinkedQueueClient.java @@ -0,0 +1,20 @@ +package com.hithomelabs.clients; + +import com.hithomelabs.princeton1.module4.LinkedQueue; +import com.hithomelabs.princeton1.module4.Queue; + +public class LinkedQueueClient { + public static void main(String[] args) { + Queue queue = new LinkedQueue(); + for(int i = 0; i < 21; i++){ + queue.enqueue(i); + } + for(int i = 0; i < 13; i++){ + System.out.println(queue.dequeue()); + } + + // Using object s, as stack is generic but every java Object has implementation of toString() + for (Object s : queue) + System.out.println(s); + } + } diff --git a/clients/src/main/java/com/hithomelabs/clients/LinkedArrayClient.java b/clients/src/main/java/com/hithomelabs/clients/LinkedStackClient.java similarity index 95% rename from clients/src/main/java/com/hithomelabs/clients/LinkedArrayClient.java rename to clients/src/main/java/com/hithomelabs/clients/LinkedStackClient.java index ce51e32..33cc4e9 100644 --- a/clients/src/main/java/com/hithomelabs/clients/LinkedArrayClient.java +++ b/clients/src/main/java/com/hithomelabs/clients/LinkedStackClient.java @@ -4,7 +4,7 @@ package com.hithomelabs.clients; import com.hithomelabs.princeton1.module4.LinkedStack; import com.hithomelabs.princeton1.module4.Stack; -public class LinkedArrayClient { +public class LinkedStackClient { public static void main(String[] args) { Stack stack = new LinkedStack(); stack.push("hello"); diff --git a/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java b/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java new file mode 100644 index 0000000..ec37bbe --- /dev/null +++ b/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java @@ -0,0 +1,74 @@ +package com.hithomelabs.princeton1.module4; + +import javax.annotation.Nonnull; +import java.util.Iterator; + +public class LinkedQueue extends Queue{ + + Node head; + Node tail; + int size; + + private class Node{ + E value; + Node next; + + Node(E value){ + this.value = value; + } + } + + @Override + public boolean isEmpty() { + return size==0; + } + + @Override + public E dequeue() { + if(isEmpty()) + return null; + E element = head.value; + // Only a single element is present + if (head == tail){ + tail = null; + } + head = head.next; + --size; + return element; + } + + @Override + public void enqueue(E element) { + Node newNode = new Node(element); + if(isEmpty()) + head = newNode; + else + tail.next = newNode; + tail = newNode; + ++size; + } + + @Override + public int size() { + return size; + } + + @Override + @Nonnull + public Iterator iterator() { + return new Iterator() { + Node current = head; + @Override + public boolean hasNext() { + return current != tail; + } + + @Override + public E next() { + E element = current.value; + current = current.next; + return element; + } + }; + } +}