kruti-working-branch #14

Closed
kruti wants to merge 15 commits from kruti/Princeton1:kruti-working-branch into main
4 changed files with 204 additions and 20 deletions
Showing only changes of commit a9d0bbf4d1 - Show all commits

View File

@ -5,28 +5,71 @@ import java.util.Iterator;
import javax.annotation.Nonnull;
public class ArrayQueue<E> extends Queue<E>{
private E[] queueArray = (E[]) new Object[1];
private int startPtr = 0;
private int endPtr = 0;
@Override
public boolean isEmpty() {
return false;
return startPtr >= endPtr;
}
@Override
public E dequeue() {
return null;
if(isEmpty()){
return null;
}
E currentValue = queueArray[startPtr];
queueArray[startPtr++] = null;
if(size() < queueArray.length/4){
changeArraySize(queueArray.length/2);
}
return currentValue;
}
@Override
public void enqueue(E element) {
queueArray[endPtr++] = element;
if(endPtr >= queueArray.length){
changeArraySize(queueArray.length*2);
}
}
@Override
public int size() {
return 0;
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<endPtr; i++)
queueArray[j++]=tempArray[i];
endPtr = size();
startPtr = 0;
}
hitanshu marked this conversation as resolved Outdated

If the old queue is wrapped, then endPtr will be less than startPtr

If the old queue is wrapped, then endPtr will be less than startPtr
@Nonnull
@Override
public Iterator<E> iterator() {
return null;
return new QueueArrayIterator();
}
private class QueueArrayIterator implements Iterator<E>{
private int iteratorIndex = startPtr;
@Override
public boolean hasNext() {
return iteratorIndex<endPtr;
}
@Override
public E next() {
return queueArray[iteratorIndex++];
}
}
}

View File

@ -5,28 +5,69 @@ import javax.annotation.Nonnull;
// Concrete implementation of stack using arrays
// Creating a generic stack of type E
public class ArrayStack<E> extends Stack<E> {
E[] stackArray = (E[]) new Object[1];
private int index = 0;
private int arrayLength = stackArray.length;
@Override
public boolean isEmpty() {
return false;
return index == 0;
}
@Override
public void push(E element) {
if(index == arrayLength){
changeArraySize(arrayLength*2);
}
stackArray[index] = element;
index++;
}
@Override
public E pop() {
return null;
if(index == 0){
return null;
}
index--;
if(index < arrayLength/4){
changeArraySize(arrayLength/2);
}
E temp = stackArray[index];
stackArray[index] = null;
return temp;
}
@Override
public int size() {
return 0;
return index;
}
@Nonnull
@Override
public Iterator<E> iterator() {
return null;
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<E>{
private int iteratorIndex = 0;
@Override
public boolean hasNext() {
return stackArray[iteratorIndex] != null;
}
@Override
public E next() {
return stackArray[iteratorIndex++];
}
}
}

View File

@ -4,28 +4,76 @@ import javax.annotation.Nonnull;
import java.util.Iterator;
public class LinkedQueue<E> extends Queue<E>{
Node<E> start = null;
Node<E> end = null;
static private class Node<E>{
E data;
Node<E> next;
private Node(E element){
data=element;
next=null;
}
}
@Override
public boolean isEmpty() {
return false;
return start == null;
}
@Override
public E dequeue() {
return null;
if(isEmpty()) {
return null;
}
E currentValue = start.data;
start = start.next;
return currentValue;
hitanshu marked this conversation as resolved Outdated

Case where only 1 element in queue, end pointer is dangling.

Case where only 1 element in queue, end pointer is dangling.
}
@Override
public void enqueue(E element) {
Node<E> new_node = new Node<E>(element);
if(isEmpty())
start = new_node;
else
end.next = new_node;
end = new_node;
}
@Override
public int size() {
return 0;
int size = 0;
Node<E> sizePtr = start;
while (sizePtr != null) {
sizePtr = sizePtr.next;
size++;
}
return size;
}
@Nonnull
@Override
public Iterator<E> iterator() {
return null;
return new LinkedQueueIterator();
}
private class LinkedQueueIterator implements Iterator<E>{
Node<E> traversePtr = start;
@Override
public boolean hasNext() {
return traversePtr != null;
}
@Override
public E next() {
E currentValue = traversePtr.data;
traversePtr = traversePtr.next;
return currentValue;
}
}
}

View File

@ -1,30 +1,82 @@
package com.hithomelabs.princeton1.module4;
import javax.annotation.Nonnull;
import java.util.Iterator;
// Creating a concrete linked Implementation of Stack
public class LinkedStack<E> extends Stack<E>{
static class Node<E>{
E data;
Node<E> next;
Node(E data) {
this.data = data;
this.next = null;
}
}
Node<E> head = null;
hitanshu marked this conversation as resolved
Review

Why do you need two pointers, both insertion and deletion happen at head

Why do you need two pointers, both insertion and deletion happen at head
Node<E> endPtr = null;
int stackLength = 0;
@Override
public boolean isEmpty() {
return false;
return head == null;
}
@Override
public void push(E element) {
Node<E> new_node = new Node<E>(element);
if(stackLength == 0)
head = new_node;
else
endPtr.next = new_node;
endPtr = new_node;
stackLength++;
}
@Override
public E pop() {
return null;
if(stackLength == 0)
return null;
if(stackLength == 1)
head = null;
Node<E> 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;
}
@Override
public int size() {
return 0;
return stackLength;
}
@Nonnull
@Override
public Iterator<E> iterator() {
return null;
return new LinkedlistIterator();
}
private class LinkedlistIterator implements Iterator<E>{
Node<E> iteratorPtr = head;
@Override
public boolean hasNext() {
return iteratorPtr.next != null;
}
@Override
public E next() {
E currentValue = iteratorPtr.data;
iteratorPtr = iteratorPtr.next;
return currentValue;
}
}
}