Implement the ADT stack by using an array stack to contain i

Implement the ADT stack by using an array stack to contain its entries. Expand the array dynamically, as necessary. Maintain the stack’s bottom entry in stack[stack.length – 1].

Your Stack class must implement StackInterface (provided). You may use ArrayStack.java (provided) as the starting point for your implementation.

You must implement a comprehensive set of unit tests using the main() method (and private utility methods) in ArrayStack.java.

ArrayStack.java

public class ArrayStack<T> implements StackInterface<T>

{

private T[] stack; // Array of stack entries

private int topIndex; // Index of top entry

private boolean initialized = false;

private static final int DEFAULT_CAPACITY = 50;

private static final int MAX_CAPACITY = 10000;

  

public ArrayStack()

{

this(DEFAULT_CAPACITY);

} // end default constructor

  

public ArrayStack(int initialCapacity)

{

checkCapacity(initialCapacity);

  

// The cast is safe because the new array contains null entries

@SuppressWarnings(\"unchecked\")

T[] tempStack = (T[])new Object[initialCapacity];

stack = tempStack;

topIndex = -1;

initialized = true;

} // end constructor

  

// < Implementations of the stack operations go here. >

// < Implementations of the private methods go here; checkCapacity and

// checkInitialization are analogous to those in Chapter 2. >

// . . .

} // end ArrayStack

StackInterface.java

public interface StackInterface<T>

{

   /** Adds a new entry to the top of this stack.

   @param newEntry An object to be added to the stack. */

   public void push(T newEntry);

  

   /** Removes and returns this stack\'s top entry.

   @return The object at the top of the stack.

   @throws EmptyStackException if the stack is empty before the operation. */

   public T pop();

  

   /** Retrieves this stack\'s top entry.

   @return The object at the top of the stack.

   @throws EmptyStackException if the stack is empty. */

   public T peek();

  

   /** Detects whether this stack is empty.

   @return True if the stack is empty. */

   public boolean isEmpty();

  

   /** Removes all entries from this stack. */

   public void clear();

} // end StackInterface

Solution

StackTester.java


public class StackTester
{

    public static void main(String[] args)
    {
        ArrayStack<Integer> aS = new ArrayStack<Integer>();
      
        aS.push(3);
        aS.push(5);
        aS.push(10);
        aS.push(11);
        System.out.println(\"\"+ aS.peek() + \", \" + aS.pop() + \", \" + aS.peek2());
        aS.remove(1);
      
    }

}


ArrayStack.java

import java.util.Arrays;


public class ArrayStack<T> implements StackInterface<T>
{
    private T[] stack;  
    private int topIndex;
    private boolean initialized = false;
    private static final int DEFAULT_CAPACITY = 50;
    private static final int MAX_CAPACITY = 10000;

    public ArrayStack()
    {
        this(DEFAULT_CAPACITY);
    }
  
    public ArrayStack(int initialCapacity)
    {
        checkCapacity(initialCapacity);
    

        @SuppressWarnings(\"unchecked\")
        T[] tempStack = (T[])new Object[initialCapacity];
        stack = tempStack;
        topIndex = -1;
        initialized = true;
    }

    public boolean isEmpty()
    {
        return topIndex < 0;
    }

    private void ensureCapacity()
    {
      if(topIndex == stack.length - 1)
      {
          int newLength = 2*stack.length;
          checkCapacity(newLength);
          stack = Arrays.copyOf(stack, newLength);
      }
    }
  
    private void ensureCapacity(int n)
    {
        // add n slots to the array
        if(topIndex == stack.length - 1){
            int newLength = 2*stack.length + n;
            checkCapacity(newLength);
            stack = Arrays.copyOf(stack, newLength);
        }
    }

    private boolean checkCapacity(int capacity)
    {
      boolean bool = true;
      if(capacity > MAX_CAPACITY)
          bool = false;
      return bool;
    }
  
    private boolean checkInitialized()
    {
        return initialized;
    }

    public void push(T newEntry)
    {
        checkInitialized();
        ensureCapacity();
        stack[topIndex+1] = newEntry;
        topIndex++;
      
    }
  
    public T pop()
    {

        checkInitialized();
        if(!isEmpty())
        {
            T top = stack[topIndex];
            stack[topIndex]= null;
            topIndex --;
            return top;
        } else
        {
            throw new ArrayIndexOutOfBoundsException(\"Stack is empty\");
        }

          
    }
  
    public T peek()
    {

        checkInitialized();
        if(isEmpty())
        {
            throw new ArrayIndexOutOfBoundsException(\"Stack is empty\");
        
        } else
            return stack[topIndex];
    }
  
    public void clear()
    {
      
        stack = (T[]) new Object[DEFAULT_CAPACITY];
        topIndex = -1;  
    }
  

    public T peek2()
    {
        checkInitialized();
        if(isEmpty())
        {
            throw new ArrayIndexOutOfBoundsException(\"Stack is empty\");
        
        } else
            return stack[topIndex-1];
  
    }

    public String toString()
    {
        String s = \"\";
        for(int i = 0; i < stack.length; i++)
        {
            s += stack[i] + \",\";
        }
        return s;
    }

    public void remove(int n)
    {
        checkInitialized();
        if(n <= topIndex)
        {
            for(int i = n; i < (topIndex - 1); i++)
            {
                stack[i] = stack[i+1];
            }
        }
    }
  
    public void pushAll(T[] a)
    {
        checkInitialized();
        checkCapacity(topIndex + a.length);
        ensureCapacity(a.length);
        for(int i = 0; i < a.length; i ++)
        {
            stack[topIndex + 1] = a[i];
            topIndex ++;
        }
      
    }
}


StackInterface.java

public interface StackInterface<T>
{
   /** Adds a new entry to the top of this stack. */
   public void push(T newEntry);

   /** Removes and returns this stack\'s top entry.*/
   public T pop();

   /** Retrieves this stack\'s top entry. */
   public T peek();

   /** Detects whether this stack is empty. */
   public boolean isEmpty();

   /** Removes all entries from this stack. */
   public void clear();

   public T peek2(); // Returns the element below the top element, or throw an exception if there are less than two elements
   public String toString(); // Returns a string that shows all of the elements on the stack. You can choose the format.
   public void remove(int n); // removes the top n entries from the stack. Stops as soon as the stack is empty.
   public void pushAll(T[] a); // pushes each element in the array , beginning with index 0.

}

Implement the ADT stack by using an array stack to contain its entries. Expand the array dynamically, as necessary. Maintain the stack’s bottom entry in stack[s
Implement the ADT stack by using an array stack to contain its entries. Expand the array dynamically, as necessary. Maintain the stack’s bottom entry in stack[s
Implement the ADT stack by using an array stack to contain its entries. Expand the array dynamically, as necessary. Maintain the stack’s bottom entry in stack[s
Implement the ADT stack by using an array stack to contain its entries. Expand the array dynamically, as necessary. Maintain the stack’s bottom entry in stack[s
Implement the ADT stack by using an array stack to contain its entries. Expand the array dynamically, as necessary. Maintain the stack’s bottom entry in stack[s
Implement the ADT stack by using an array stack to contain its entries. Expand the array dynamically, as necessary. Maintain the stack’s bottom entry in stack[s

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site