-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimplequeue.cpp
More file actions
79 lines (67 loc) · 1.36 KB
/
Copy pathsimplequeue.cpp
File metadata and controls
79 lines (67 loc) · 1.36 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
#include <iostream>
class Queue {
public:
Queue(int capacity):
cap{capacity},
sz{0},
elem{new int[capacity]},
head{0},
tail{0}
{}
~Queue() {
delete[] elem;
}
int getSize() { return sz; }
void enqueue(int e) {
if (sz >= cap)
resize();
*(elem+tail) = e;
tail = (tail+1)%cap;
sz++;
}
int dequeue() {
if (sz == 0)
return -1;
int rt = *(elem+head);
head = (head+1)%cap;
sz--;
return rt;
}
private:
void resize() {
int* newElem = new int[2*cap];
for (int i = head; i < head+cap; ++i) {
newElem[i-head] = elem[i%cap];
}
head = 0;
tail = head+cap;
this->cap = 2*cap;
this->elem = newElem;
}
int cap;
int sz;
int* elem;
int head;
int tail;
};
int main() {
Queue q{3};
q.enqueue(5);
q.enqueue(4);
q.enqueue(10);
int dq = q.dequeue();
q.enqueue(10);
dq = q.dequeue();
dq = q.dequeue();
dq = q.dequeue();
q.enqueue(7);
q.enqueue(3);
q.enqueue(2);
q.enqueue(4);
int sz = q.getSize();
std::cout << "Size: " << sz << '\n';
dq = q.dequeue();
std::cout << "Dequeued elem: " << dq << '\n';
sz = q.getSize();
std::cout << "Size: " << sz << '\n';
}