Skip to content

Commit 3df07fe

Browse files
authored
Merge pull request kelvins#259 from hmigl/main
Add dynamic queue in C++
2 parents 070cc66 + 9a829cc commit 3df07fe

File tree

2 files changed

+95
-2
lines changed

2 files changed

+95
-2
lines changed

Diff for: README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1814,8 +1814,8 @@ In order to achieve greater coverage and encourage more people to contribute to
18141814
</a>
18151815
</td>
18161816
<td> <!-- C++ -->
1817-
<a href="./CONTRIBUTING.md">
1818-
<img align="center" height="25" src="./logos/github.svg" />
1817+
<a href="./src/cpp/DynamicQueue.cpp">
1818+
<img align="center" height="25" src="./logos/cplusplus.svg" />
18191819
</a>
18201820
</td>
18211821
<td> <!-- Java -->

Diff for: src/cpp/DynamicQueue.cpp

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#include <cstddef>
2+
#include <iostream>
3+
4+
struct Node {
5+
int key;
6+
Node *next;
7+
8+
Node(int key) : key(key), next(nullptr) {}
9+
};
10+
11+
class DynamicQueue {
12+
private:
13+
Node *_begin;
14+
Node *_end;
15+
16+
public:
17+
DynamicQueue() : _begin(nullptr), _end(nullptr) {}
18+
19+
~DynamicQueue() {
20+
while (_begin) {
21+
Node *tmp = _begin;
22+
_begin = _begin->next;
23+
delete tmp;
24+
}
25+
}
26+
27+
bool isEmpty(void) const { return _begin == nullptr; }
28+
29+
void enqueue(int key) {
30+
Node *node = new Node(key);
31+
32+
if (isEmpty()) {
33+
_begin = node;
34+
} else {
35+
_end->next = node;
36+
}
37+
_end = node;
38+
}
39+
40+
Node *dequeue(void) {
41+
if (isEmpty()) {
42+
return nullptr;
43+
}
44+
45+
Node *removed = _begin;
46+
_begin = _begin->next;
47+
if (isEmpty()) {
48+
_end = nullptr;
49+
}
50+
return removed;
51+
}
52+
53+
size_t size(void) const {
54+
size_t size = 0;
55+
56+
Node *curr = _begin;
57+
while (curr) {
58+
++size;
59+
curr = curr->next;
60+
}
61+
62+
return size;
63+
}
64+
65+
void print(void) const {
66+
if (isEmpty()) {
67+
std::cout << "empty queue";
68+
} else {
69+
Node *curr = _begin;
70+
while (curr) {
71+
std::cout << curr->key << ' ';
72+
curr = curr->next;
73+
}
74+
}
75+
std::cout << std::endl;
76+
}
77+
};
78+
79+
int main(void) {
80+
DynamicQueue queue;
81+
82+
queue.enqueue(42);
83+
queue.enqueue(5);
84+
queue.enqueue(1231);
85+
queue.enqueue(515);
86+
queue.print(); // 42 5 1231 515
87+
88+
// Use 'delete' keyword to make the code leak-free
89+
queue.dequeue();
90+
queue.dequeue();
91+
queue.print(); // 1231 515
92+
return 0;
93+
}

0 commit comments

Comments
 (0)