-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHybrid.h
More file actions
101 lines (89 loc) · 1.94 KB
/
Hybrid.h
File metadata and controls
101 lines (89 loc) · 1.94 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#if !defined (HYBRID_H)
#define HYBRID_H
#include "QueueLinked.h"
using CSC2110::QueueLinked;
#include "SortedListDoublyLinked.h"
template < class T >
class Hybrid
{
private:
QueueLinked<DoubleNode<T> >* q;
SortedListDoublyLinked<T>* sldl;
public:
Hybrid(int (*comp_items) (T* item_1, T* item_2), int (*comp_keys) (String* key, T* item));
~Hybrid();
bool isEmpty();
void enqueue(T* item);
T* dequeue();
ListDoublyLinkedIterator<T>* iterator();
};
template < class T >
Hybrid<T>::Hybrid(int (*comp_items) (T* item_1, T* item_2), int (*comp_keys) (String* key, T* item))
{
q = new QueueLinked<DoubleNode<T> >();
sldl = new SortedListDoublyLinked<T>(comp_items, comp_keys);
}
template < class T >
Hybrid<T>::~Hybrid()
{
delete q;
delete sldl;
}
//DO THIS
//complete the implementation for the Hybrid ADT in two different ways
//as outlined in the Lab 10 description
//simply comment the first implementation out when working on the second implementation
//use the getKey method to dequeue/remove
/*
FIRST IMPLEMENTATION
template < class T >
bool Hybrid<T>::isEmpty()
{
return q->isEmpty();
}
template < class T >
void Hybrid<T>::enqueue(T* item)
{
q->enqueue(item);
sldl->add(item);
}
template < class T >
T* Hybrid<T>::dequeue()
{
T* item = q->dequeue();
String* sk = item->getKey();
sldl->remove(sk);
return item;
}
template < class T >
ListDoublyLinkedIterator<T>* Hybrid<T>::iterator()
{
return sldl->iterator();
}
*/
template < class T >
bool Hybrid<T>::isEmpty()
{
return q->isEmpty();
}
template < class T >
void Hybrid<T>::enqueue(T* item)
{
DoubleNode<T>* node = sldl->addDN(item);
q->enqueue(node);
}
template < class T >
T* Hybrid<T>::dequeue()
{
DoubleNode<T>* node = q->dequeue();
T* item = node->getItem();
String* sk = item->getKey();
sldl->remove(sk);
return item;
}
template < class T >
ListDoublyLinkedIterator<T>* Hybrid<T>::iterator()
{
return sldl->iterator();
}
#endif