-
Notifications
You must be signed in to change notification settings - Fork 0
/
Queue.h
107 lines (91 loc) · 1.63 KB
/
Queue.h
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
102
103
104
105
106
107
#pragma once
#pragma once
#include <iostream>
template <typename data>
class Queue {
class QNode {
public:
data Data;
QNode* Next;
QNode(const data val, QNode* curr = nullptr)
{
Data = val;
Next = curr;
}
};
private:
QNode* Front;
QNode* Rear;
public:
Queue();
void Display();
bool IsEmpty();
void Dequeue();
const data Peek();
void Dequeue(data);
void Enqueue(const data);
~Queue();
};
template<typename data>
inline Queue<data>::Queue()
{
Front = Rear = nullptr;
}
template<typename data>
inline void Queue<data>::Enqueue(const data val)
{
QNode* curr = new QNode(val);
if (IsEmpty())
{
Front = Rear = curr;
return;
}
Rear->Next = curr;
Rear = curr;
}
template<typename data>
inline void Queue<data>::Dequeue()
{
if (IsEmpty())
return;
else if (Front == Rear)
{
delete Rear;
Front = Rear = nullptr;
return;
}
QNode* curr = Front;
Front = Front->Next;
delete curr;
}
template<typename data>
inline const data Queue<data>::Peek()
{
if (!IsEmpty())
return Front->Data;
return NULL;
}
template<typename data>
inline void Queue<data>::Dequeue(data ResVar)
{
ResVar = Front->Data;
this->Dequeue();
}
template<typename data>
inline void Queue<data>::Display()
{
for (QNode* curr = Front; curr != nullptr; curr = curr->Next)
std::cout << curr->Data << " ";
}
template<typename data>
inline bool Queue<data>::IsEmpty()
{
return (Front == nullptr) && (Rear == nullptr);
}
template<typename data>
inline Queue<data>::~Queue()
{
while (Front != nullptr)
Dequeue();
Front = Rear = nullptr;
}