Stacks and Queues
Due: 5 Mar 2008
Educational objectives:
- Primary objectives: Experience implementing simple stack and queue classes, using stacks to simulate recursion, using recursive function calls.
- Secondary objectives: Implementing and using templates.
Statement of work: (i) Implement generic stack and queue classes, and (ii) use your stack class to evaluate a recursive function.
Deliverables:
- Turn in a
makefile
and all header (*.h) and cpp (*.cpp) files that are needed to build your software, as described in www.cs.fsu.edu/~asriniva/courses/DS08/HWinstructions.html. Turn in your development log too, which should be a plain ASCII text file calledLOG.txt
in your project directory.Requirements:
- Create a subdirectory called
proj4
.- You will need to have a
makefile
in this directory. In addition, all the header and cpp files needed to build your software must be present here, as well as theLOG.txt
file.- You should create the following additional files.
- stack.h: This should implement a generic
stack
class with at least the following features: (i)void push(T &)
, (ii)void pop()
, (iii)T &top()
, and (iv)bool empty()
.- queue.h: This should implement a generic
queue
class with at least the following features: (i)void push(T &)
, (ii)void pop()
, (iii)T &front()
, and (iv)bool empty()
.- Other files: You may use more files.
- main.cpp: This is the main program. The command:
./recurse N1 C1 A1 M1 M2 M3 M4 D1 D2 S1 S2 Arg Op
will cause the function given below to be evaluated in two different ways, and the two answers output. (The answers should be identical if your code is correct). The function should first be evaluated recursively, and next evaluated using a stack to simulate the recursion. The function is defined as follows.
f(N) = 0
, ifN < N1
f(N1) = C1
f(N)= A1 + M1*f(M2*N/D1 - S1) Op M3*f(M4*N/D2 - S2)
, ifN > N1
Here,
f(Arg)
needs to be evaluated. N1 C1 A1 M1 M2 M3 M4 D1 D2 S1 S2, Arg are integers and Op is either+
or-
. The division performed is the usual integer division with truncation.Example:
Prompt> ./recurse 2 3 2 1 2 0 1 3 6 0 0 18 +
13 13
(program output)Sample executable: A sample executable is available at ~cop4530/spring08/solutions/proj4/recurse on
linprog
. The first person to find errors in our program will get a bonus point!Notes:
- You should not use the STL
list
,vector
,deque
,stack
, orqueue
classes. You may use thestring
class. Please get my permission before using any other STL feature.- We will test your
stack
andqueue
classes on entirely different applications. So it is important for these classes to be generic and exactly as specified.
Last modified: 19 Feb 2008