Due: 2025-10-10 23:59:00EDT
In this assignment, we’ll explore Stacks and Queues.
All files that you need can be downloaded with
wget https://raw.githubusercontent.com/BMC-CS-151/BMC-CS-151.github.io/main/hws/hw03/ArrayStack.java
wget https://raw.githubusercontent.com/BMC-CS-151/BMC-CS-151.github.io/main/hws/hw03/Deque.java
wget https://raw.githubusercontent.com/BMC-CS-151/BMC-CS-151.github.io/main/hws/hw03/IntStack.java
wget https://raw.githubusercontent.com/BMC-CS-151/BMC-CS-151.github.io/main/hws/hw03/Queue.java
wget https://raw.githubusercontent.com/BMC-CS-151/BMC-CS-151.github.io/main/hws/hw03/Stack.java
These requirements apply to the implementations of all parts of the assignment (or two parts, if you are not doing extra credit).Unless specified, you cannot use any built-in java data structures.
toString to return a String that contains the contents of the
data structure in the following format, starting from the first-in element as
(elment1, element2, ..., elementN).
Note that in case of a stack, this means top is printed last.JUnit tests. Be sure to test all methods and all exceptions as well. Note that it is
not enough to have just one test case for each method; there are plenty of complex interactions between the methods that should be covered as well. (And yes, you need to test toString as well.)
The name of test file should be Test<ClassName>.java. Your tests will be graded on code coverage. Code coverage measures the percentage of the source code executed when your test suite runs. In general, try to write tests which execute every line in your program.A TwoStacksQueue object is a Queue, meaning that we insert and remove
items based on FIFO - first in first out.
Write a class called TwoStacksQueue that implements the Queue interface.
Your class will store two ArrayStack objects (given in the ArrayStack file you downloaded) as instance variables.
It cannot have any other instance variables.
Since you are using two stacks to simulate a queue, it will certainly not be the most efficient implementation of a queue and that’s ok - just as long as you know that and can analyze the runtime appropriately in the README - see below. There should not be any other array/ArrayList/linked list used within your implementation.
In your README, provide a discussion on the design of your data
structure.
Make sure to describe how you implemented enqueue and dequeue
operations. In addition, you should provide a worse-case big-O analysis
of each of these operations.
You should use
ArrayStack.java and Stack.java and Queue.java
Queue.java is an interface which you must implement. Follow the instructions in that interface file for intended behavior.
You should have two constructors. One which takes a max capacity and one which takes no arguments and sets the array’s capacity to a size 100.
Testing: Name the test file TestTwoStacksQueue.java
In a class called ArrayDeque, implement the Deque data structure (double-ended queue where we can insert
and delete at both ends) with an array used in a circular fashion.
Dequeue.java specifies the
Deque interface that you must implement.
The discussion in Section 6.3 of the textbook will be very helpful.
You should have two constructors. One which takes a max capacity and one which takes no arguments and sets the array’s capacity to a size 100.
If your deque is full and the user tries to add another element, throw a RuntimeException. If the user tries to remove from an empty deque, return null.
Testing: Name the test file TestArrayDeque.java
In a file callled NewStack.java,
implement a stack data structure called NewStack which implements the Stack interface and supports
that supports the usual operations size, isEmpty, push,
pop, top on generic types.
NewStack must support an
additional operation minElement, which returns (but does
not remove) the smallest element currently in the stack.
All operations
(except for toString) should run in O(1) worst case time - note that this
means no loops of any kind.
There are different designs to achieve the O(1)
minElement, differing mainly in the amount of additional space.
Two common approaches are O(1) space or O(n) space. Explain how your data structure
works in your README and justify the O(1) runtime of minElement, together with
the amount of space used.
Testing: Name the test file TestNewStack.java
Submit the following files to the assignment called HW03 on Gradescope:
TwoStacksQueue.javaTestTwoStacksQueue.javaArrayDeque.javaTestArrayDeque.javaNewStack.java (optional)TestNewStack.java (optional)README.txtBe sure to submit the README for this assignment as its worth significantly more points than in previous assignments.
Make sure to name these files exactly what we specify here. Otherwise,
our autograders might not work and we might have to take points off.
DO NOT submit a .docx or .pdf file.
DO NOT submit any .class files or any of the csv files.
DO NOT submit any of the provided interfaces. We will use the ones
we provide for testing.
You will likely want to submit the files from your own laptop/computer.
To copy the files from goldengate to your own machine,
open up a terminal on your own computer. If you have a mac or linux, you can use the
Terminal application, if you have a windows you can use the Powershell app.
Run the following command:
$ scp <username>@goldengate.cs.brynmawr.edu/home/<username>/cs151/homeworks/hw03/*
Make sure to replace <username> with your username. scp is a command to secure-copy files
from one server to another. In this case, from goldengate to your own machine.