-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPriorityQueue.hpp
125 lines (97 loc) · 2.9 KB
/
PriorityQueue.hpp
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#ifndef QUEUE_HPP
#define QUEUE_HPP
#include <iostream>
using namespace std;
/** Representació d'una cua amb prioritat.
*
* Els seus elements s'encuen en funció de la seva prioritat
* de manera que els elements amb més prioritat se serveixen
* primer. Si apareixen elements amb la mateixa prioritat,
* s'encuen segons el seu ordre ordre d'arribada.
*/
template <typename T>
class Queue {
private:
struct Item {
T value;
Item *next;
};
Item *first;
Item *last;
int _size;
///--------------------------
// Mètodes privats auxiliars
//--------------------------
/* Pre: cert */
/* Post: fa una còpia de la cadena de nodes
apuntats per item per permetre assignar cues (=) i
crear cues fent servir el constructor còpia */
void copyItems(const Item *item, Item *(&first), Item *(&last), int &_size);
/* Pre: cert */
/* Post: no fa res si item és NULL, sinó allibera
espai de la cadena de nodes apuntada per item */
void deleteItems(Item *item);
public:
//-------------
// Constructors
//-------------
/* Pre: cert */
/* Post: el resultat és una cua amb prioritat sense cap element */
Queue();
/* Pre: cert */
/* Post: el resultat és una cua amb prioritat còpia de la
cua rebuda */
Queue(Queue &q);
//-------------
// Destructor
//-------------
/* esborra automàticament els objectes locals
en sortir d'un àmbit de visibilitat */
~Queue();
//-------------
// Modificadors
//-------------
/* Pre: cert */
/* Post: operació d'assignació de cues */
Queue &operator=(const Queue &q);
/* Pre: el paràmetre implícit no és buit */
/* Post: elimina el primer element del paràmetre
implícit */
void pop();
/* Pre: cert */
/* Post: afegeix el valor rebut per paràmetre en el
paràmetre implícit, tenint en compte la seva prioritat */
void push(T value);
/* Pre: el paràmetre implícit no és buit */
/* Post: elimina el valor rebut per paràmetre del
paràmetre implícit */
void remove(T value);
//-----------
// Consultors
//-----------
/* Pre: el paràmetre implícit no és buit */
/* Post: el resultat és el primer element
del paràmetre implícit */
T front() const;
/* Pre: cert */
/* Post: el resultat és el nombre d'elements
del paràmetre implícit */
int size() const;
/* Pre: cert */
/* Post: el resultat indica si el paràmetre
implícit és buit o no */
bool empty() const;
//-----------
// L/E
//-----------
/* Pre: cert */
/* Post: s'han escrit al canal estàndard de sortida els elements
de q */
template<typename U> friend ostream &operator<<(ostream &os, const Queue<U> &q);
/* Pre: q està buida; el canal estàndard d'entrada els elements
d'una cua Q */
/* Post: q = Q */
template<typename U> friend istream &operator>>(istream &is, Queue<U> &q);
};
#include "PriorityQueue.cpp"
#endif