Skip to content

Commit eb2e5ad

Browse files
committed
Add Double-Ended Queue (Deque) implementation in C++ inside queues folder
1 parent 814200c commit eb2e5ad

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
#include <iostream>
2+
#include <stdexcept>
3+
4+
template <typename T>
5+
class Deque {
6+
private:
7+
struct Node {
8+
T data;
9+
Node* prev;
10+
Node* next;
11+
};
12+
13+
Node* front;
14+
Node* rear;
15+
int size;
16+
17+
public:
18+
Deque() : front(nullptr), rear(nullptr), size(0) {}
19+
20+
~Deque() {
21+
while (size > 0) {
22+
deleteFront();
23+
}
24+
}
25+
26+
void insertFront(T value) {
27+
Node* newNode = new Node{value, nullptr, front};
28+
if (front) {
29+
front->prev = newNode;
30+
}
31+
front = newNode;
32+
if (!rear) {
33+
rear = front;
34+
}
35+
++size;
36+
}
37+
38+
void insertRear(T value) {
39+
Node* newNode = new Node{value, rear, nullptr};
40+
if (rear) {
41+
rear->next = newNode;
42+
}
43+
rear = newNode;
44+
if (!front) {
45+
front = rear;
46+
}
47+
++size;
48+
}
49+
50+
void deleteFront() {
51+
if (front) {
52+
Node* temp = front;
53+
front = front->next;
54+
if (front) {
55+
front->prev = nullptr;
56+
} else {
57+
rear = nullptr;
58+
}
59+
delete temp;
60+
--size;
61+
} else {
62+
throw std::out_of_range("Deque is empty");
63+
}
64+
}
65+
66+
void deleteRear() {
67+
if (rear) {
68+
Node* temp = rear;
69+
rear = rear->prev;
70+
if (rear) {
71+
rear->next = nullptr;
72+
} else {
73+
front = nullptr;
74+
}
75+
delete temp;
76+
--size;
77+
} else {
78+
throw std::out_of_range("Deque is empty");
79+
}
80+
}
81+
82+
T getFront() const {
83+
if (front) {
84+
return front->data;
85+
} else {
86+
throw std::out_of_range("Deque is empty");
87+
}
88+
}
89+
90+
T getRear() const {
91+
if (rear) {
92+
return rear->data;
93+
} else {
94+
throw std::out_of_range("Deque is empty");
95+
}
96+
}
97+
98+
int getSize() const {
99+
return size;
100+
}
101+
102+
bool isEmpty() const {
103+
return size == 0;
104+
}
105+
};
106+
107+
int main() {
108+
Deque<int> dq;
109+
dq.insertFront(10);
110+
dq.insertRear(20);
111+
dq.insertFront(5);
112+
113+
std::cout << "Front: " << dq.getFront() << std::endl;
114+
std::cout << "Rear: " << dq.getRear() << std::endl;
115+
std::cout << "Size: " << dq.getSize() << std::endl;
116+
117+
dq.deleteFront();
118+
dq.deleteRear();
119+
120+
std::cout << "Size after deletions: " << dq.getSize() << std::endl;
121+
122+
return 0;
123+
}

0 commit comments

Comments
 (0)