$20
Implement a Queue with whatever data structure you desire. Remember you may use code from a previous lab (*hint* *hint*).
In your lab finish the implementation of a Queue:
#ifndef QUEUE_H #define QUEUE_H
template<class T> class Queue { private:
/* Class to implement.*/ public:
/* Empty constructor shall create an empty Queue! */ Queue();
/* Do a deep copy of queue into the this.
* Note: This one uses a reference to a Queue!
*/
Queue(const Queue<T> &queue);
/* Deconstructor shall free up memory */
~Queue();
/* Return the current length (number of items) in the queue */ int getLength() const;
/* Returns true if the queue is empty. */ bool isEmpty() const; /* Print out the Queue */ void print() const;
/* Pushes the val to the end of the queue. */ bool push(const T &val);
/* returns the first element from the queue. */ T& first();
/* Removes the first element from the queue. */ void pop();
/* Returns if the two queues contain the same elements in the * same order.
*/ bool operator==(const Queue<T> &queue) const; /* Add a value to the queue with respect to priority.
* For this function a lower number is a higher priority.
* EX: If the Queue is of integers and is { 5, 10, 15} and I add 7, * the new queue is { 5, 7, 10, 15}.
*/ void addWithPriority(const T& val);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* Return the length of the shortest path, but with warps. The map is
* a 2D array with each cell having the following property
* 0: Cell is open (passable) * -1: Cell is a wall (impassable) * > 0: Cell is a warp.
* A warp is a value > 999 and warps to the position * (<first three digits, second three digits).
* Hence 1000 warps to (1, 0), and 203109 warps to (203, 109)
* To get the x value: <cell>/1000
* To get the y value: <cell>%1000 * Note: Taking a warp costs 1.
*/ int getShortestPathWithWarps(int **map, int width, int length, int sx, int sy, int ex, int ey);
};
#include "queue.cpp"
#endif
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
STL:
You may use vector, string, and list from the STL.
Write some test cases:
Create some test cases, using cxxtestgen, that you believe would cover all aspects of your code.
Memory Management:
Now that are using new, we must ensure that there is a corresponding delete to free the memory. Ensure there are no memory leaks in your code! Please run Valgrind on your tests to ensure no memory leaks!