diff --git a/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayQueue.java b/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayQueue.java index 41ecda7..f9c22b2 100644 --- a/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayQueue.java +++ b/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayQueue.java @@ -5,28 +5,94 @@ import java.util.Iterator; import javax.annotation.Nonnull; public class ArrayQueue extends Queue{ +<<<<<<< Updated upstream @Override public boolean isEmpty() { return false; +======= + + private E[] queueArray = (E[]) new Object[1]; + private int startPtr = 0; + private int endPtr = 0; + + @Override + public boolean isEmpty() { + return startPtr >= endPtr; +>>>>>>> Stashed changes } @Override public E dequeue() { +<<<<<<< Updated upstream return null; +======= + if(isEmpty()){ + return null; + } + E currentValue = queueArray[startPtr]; + queueArray[startPtr++] = null; + if(size() < queueArray.length/4){ + changeArraySize(queueArray.length/2); + } + return currentValue; +>>>>>>> Stashed changes } @Override public void enqueue(E element) { +<<<<<<< Updated upstream +======= + queueArray[endPtr++] = element; + if(endPtr >= queueArray.length){ + changeArraySize(queueArray.length*2); + } +>>>>>>> Stashed changes } @Override public int size() { +<<<<<<< Updated upstream return 0; } @Override public Iterator iterator() { return null; +======= + return endPtr - startPtr; + } + + private void changeArraySize(int targetSize){ + E[] tempArray = queueArray; + int oldArraySize = tempArray.length; + queueArray = (E[]) new Object[targetSize]; + int j = 0; + for(int i=startPtr; i iterator() { + return new QueueArrayIterator(); + } + + private class QueueArrayIterator implements Iterator{ + + private int iteratorIndex = startPtr; + + @Override + public boolean hasNext() { + return iteratorIndex>>>>>> Stashed changes } } diff --git a/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayStack.java b/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayStack.java index c67f138..0fb88bf 100644 --- a/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayStack.java +++ b/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayStack.java @@ -5,28 +5,92 @@ import javax.annotation.Nonnull; // Concrete implementation of stack using arrays // Creating a generic stack of type E public class ArrayStack extends Stack { +<<<<<<< Updated upstream @Override public boolean isEmpty() { return false; +======= + + E[] stackArray = (E[]) new Object[1]; + private int index = 0; + private int arrayLength = stackArray.length; + + @Override + public boolean isEmpty() { + return index == 0; +>>>>>>> Stashed changes } @Override public void push(E element) { +<<<<<<< Updated upstream +======= + if(index == arrayLength){ + changeArraySize(arrayLength*2); + } + stackArray[index] = element; + index++; +>>>>>>> Stashed changes } @Override public E pop() { +<<<<<<< Updated upstream return null; +======= + if(index == 0){ + return null; + } + index--; + if(index < arrayLength/4){ + changeArraySize(arrayLength/2); + } + E temp = stackArray[index]; + stackArray[index] = null; + return temp; +>>>>>>> Stashed changes } @Override public int size() { +<<<<<<< Updated upstream return 0; } @Override public Iterator iterator() { return null; +======= + return index; + } + + @Nonnull + @Override + public Iterator iterator() { + return new StackIterator(); + } + + private void changeArraySize(int intendedSize){ + E[] tempArray = stackArray; + int oldArraySize = stackArray.length; + stackArray = (E[]) new Object[intendedSize]; + arrayLength = stackArray.length; + System.arraycopy(tempArray, 0, stackArray, 0, Math.min(oldArraySize, arrayLength)); + } + + private class StackIterator implements Iterator{ + private int iteratorIndex = 0; + + @Override + public boolean hasNext() { + return stackArray[iteratorIndex] != null; + } + + @Override + public E next() { + return stackArray[iteratorIndex++]; + } +>>>>>>> Stashed changes } } diff --git a/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java b/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java index b68b148..644003f 100644 --- a/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java +++ b/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedQueue.java @@ -4,28 +4,99 @@ import javax.annotation.Nonnull; import java.util.Iterator; public class LinkedQueue extends Queue{ +<<<<<<< Updated upstream @Override public boolean isEmpty() { return false; +======= + + Node start = null; + Node end = null; + + static private class Node{ + E data; + Node next; + + private Node(E element){ + data=element; + next=null; + } + } + + @Override + public boolean isEmpty() { + return start == null; +>>>>>>> Stashed changes } @Override public E dequeue() { +<<<<<<< Updated upstream return null; +======= + if(isEmpty()) { + return null; + } + E currentValue = start.data; + start = start.next; + return currentValue; +>>>>>>> Stashed changes } @Override public void enqueue(E element) { +<<<<<<< Updated upstream +======= + Node new_node = new Node(element); + if(isEmpty()) + start = new_node; + else + end.next = new_node; + end = new_node; +>>>>>>> Stashed changes } @Override public int size() { +<<<<<<< Updated upstream return 0; } @Override public Iterator iterator() { return null; +======= + int size = 0; + Node sizePtr = start; + while (sizePtr != null) { + sizePtr = sizePtr.next; + size++; + } + return size; + } + + @Nonnull + @Override + public Iterator iterator() { + return new LinkedQueueIterator(); + } + + private class LinkedQueueIterator implements Iterator{ + + Node traversePtr = start; + + @Override + public boolean hasNext() { + return traversePtr != null; + } + + @Override + public E next() { + E currentValue = traversePtr.data; + traversePtr = traversePtr.next; + return currentValue; + } +>>>>>>> Stashed changes } } diff --git a/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedStack.java b/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedStack.java index 72259c0..185bf04 100644 --- a/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedStack.java +++ b/module4/src/main/java/com/hithomelabs/princeton1/module4/LinkedStack.java @@ -1,30 +1,105 @@ package com.hithomelabs.princeton1.module4; + +import javax.annotation.Nonnull; import java.util.Iterator; // Creating a concrete linked Implementation of Stack public class LinkedStack extends Stack{ +<<<<<<< Updated upstream @Override public boolean isEmpty() { return false; +======= + + static class Node{ + E data; + Node next; + + Node(E data) { + this.data = data; + this.next = null; + } + } + + Node head = null; + Node endPtr = null; + int stackLength = 0; + + @Override + public boolean isEmpty() { + return head == null; +>>>>>>> Stashed changes } @Override public void push(E element) { +<<<<<<< Updated upstream +======= + Node new_node = new Node(element); + if(stackLength == 0) + head = new_node; + else + endPtr.next = new_node; + endPtr = new_node; + stackLength++; +>>>>>>> Stashed changes } @Override public E pop() { +<<<<<<< Updated upstream return null; +======= + if(stackLength == 0) + return null; + if(stackLength == 1) + head = null; + Node secondLastPtr = head; + while(secondLastPtr!=null && secondLastPtr.next != endPtr && secondLastPtr.next!=null) + secondLastPtr = secondLastPtr.next; + E currentValue = endPtr.data; + endPtr.next = null; + endPtr = secondLastPtr; + stackLength--; + return currentValue; +>>>>>>> Stashed changes } @Override public int size() { +<<<<<<< Updated upstream return 0; +======= + return stackLength; +>>>>>>> Stashed changes } + @Nonnull @Override public Iterator iterator() { +<<<<<<< Updated upstream return null; } +======= + return new LinkedlistIterator(); + } + + private class LinkedlistIterator implements Iterator{ + + Node iteratorPtr = head; + + @Override + public boolean hasNext() { + return iteratorPtr.next != null; + } + + @Override + public E next() { + E currentValue = iteratorPtr.data; + iteratorPtr = iteratorPtr.next; + return currentValue; + } + } +>>>>>>> Stashed changes }