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() {
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;
}
@Nonnull
@Override
public Iterator<E> iterator() {
return new QueueArrayIterator();
}
private class QueueArrayIterator implements Iterator<E>{
private int iteratorIndex = startPtr;
@Override
public boolean hasNext() {
return iteratorIndex<endPtr;
}
@Override
public Iterator<E> iterator() {
return null;
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() {
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 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 Iterator<E> iterator() {
return null;
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() {
if(isEmpty()) {
return null;
}
E currentValue = start.data;
start = start.next;
return currentValue;
}
@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 new LinkedQueueIterator();
}
private class LinkedQueueIterator implements Iterator<E>{
Node<E> traversePtr = start;
@Override
public boolean hasNext() {
return traversePtr != null;
}
@Override
public Iterator<E> iterator() {
return null;
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() {
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 new LinkedlistIterator();
}
private class LinkedlistIterator implements Iterator<E>{
Node<E> iteratorPtr = head;
@Override
public boolean hasNext() {
return iteratorPtr.next != null;
}
@Override
public Iterator<E> iterator() {
return null;
public E next() {
E currentValue = iteratorPtr.data;
iteratorPtr = iteratorPtr.next;
return currentValue;
}
}
}