Quiz 07

Quiz 07



Important notes:
  1. Do not start until you are instructed to do so!
  2. You will have 20 minutes once the proctor says to start.
  3. You will have brief additional time after we stop to scan and submit your solutions.

  4. Just before the quiz...
    1. Have a fully-charged smartphone and laptop, and still plug both in if possible
    2. Log into Gradescope on your phone
    3. Change the screen timeout setting on your phone to never, so your screen doesn't go black if you don't interact with your screen for a while.
      • iPhones: Settings / Display & Brightness / Auto-Lock / Never
      • Android: Settings / Display / Screen timeout / 10 minutes (or the maximum amount of time)
    4. Turn on Do Not Disturb (or otherwise turn off all notifications).
    5. Position your webcam so we can see:
      • Your desk
      • The paper you are working on
      • Your writing utensil(s)
      • Both of your hands
      • Your phone

  5. During the quiz:
    1. You may not ask questions during the exam.
      • If you are unsure how to interpret a problem, take your best guess.
      • If you feel a question is unfair because you could not ask a question about it, please email the instructor after the quiz and describe your concern. (We are working hard to make the questions extra clear this year, but we want to know when we fail.)
    2. You may not touch your laptop or webcam.
      • This includes muting yourself at any point; the proctors may mute you though.
    3. All of these must be visible at all times:
      • Your desk
      • The paper you are working on
      • Your writing utensil(s)
      • Both of your hands
      • Your phone, with the quiz webpage
    4. For any tech fails (laptop or internet stops working, etc.):
      1. Stop taking the quiz
      2. Email the instructor (rileyrd@cmu.edu) right away
      3. We will reply soon to set up a 1-on-1 oral quiz with the course faculty

  6. After the quiz:
    1. Follow all proctor instructions on how to end the quiz.
    2. If you finish early, wait patiently until the end of the quiz. (Note: Don't use your phone...)
    3. Keep everything in view (as noted above) until the proctor calls "time".
    4. When instructed, use your phone to scan your quiz and submit the PDF to Gradescope.
    5. After submitting to Gradescope, hold your phone up to the webcam to show the receipt.
    6. Even then, remain in quiz mode until the proctor calls "all clear"

Stack Interface

In this problem you are going to build a simple stack using a linked list.

Remember: A stack is a Last-In, First-Out (LIFO) data structure.

If you implement a stack using a linked list, then all operations happen on the head of the list:

Consider the following interface for a stack:

public interface Stack<DataType> {
    /**
     * Tests if this stack is empty.
     * 
     * @return true if the stack is empty,
     *         false otherwise
     */
    public boolean isEmpty();

    /**
     * Puts an item onto the top of this stack.
     * 
     * @param value The item to place on the
     *              stack
     */
    public void push(DataType value);

    /**
     * Remove the top item from this stack and
     * return it.
     * 
     * @return The item on top of the stack
     * 
     * @throws EmptyStackException if this
     *         stack is empty.
     */
    public DataType pop();
}

A. Efficiency of push [3 pts]

Assuming that the push operation uses a linked list and operates as described above, what is its Big-O efficiency? Write one sentence justifying your answer.

B. Efficiency of pop [3 pts]

Assuming that the pop operation uses a linked list and operates as described above, what is its Big-O efficiency? Write one sentence justifying your answer.

C. Implementation [14 pts]

Write a class named MyStack that fully implements the Stack interface.

You must implement your own linked list as the underlying data structure for MyStack.

To save you time, you may assume that the private inner-class ListNode, identical to Homework 4, exists inside of MyStack. You do not need to write it again in your answer. It is reprinted here in case you don’t remember it:

private class ListNode {
    private DataType data;
    private ListNode next;

    public ListNode(DataType data) {
        this.data = data;
        this.next = null;
    }

    public String toString() {
        return data.toString();
    }
}

Hints: