Skip to content

Commit 4e3b734

Browse files
committed
qs
1 parent 90129c6 commit 4e3b734

File tree

3 files changed

+87
-2
lines changed

3 files changed

+87
-2
lines changed

Diff for: Practice Concepts/Data Structures/dequeue.py

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from collections import deque
2+
3+
class Deque:
4+
def __init__(self):
5+
self.deque = deque()
6+
7+
def enqueue_front(self, item):
8+
self.deque.appendleft(item) # Add item to the front
9+
10+
def enqueue_rear(self, item):
11+
self.deque.append(item) # Add item to the rear
12+
13+
def dequeue_front(self):
14+
if not self.is_empty():
15+
return self.deque.popleft() # Remove and return the front item
16+
raise IndexError("Dequeue from an empty deque")
17+
18+
def dequeue_rear(self):
19+
if not self.is_empty():
20+
return self.deque.pop() # Remove and return the rear item
21+
raise IndexError("Dequeue from an empty deque")
22+
23+
def is_empty(self):
24+
return len(self.deque) == 0
25+
26+
def size(self):
27+
return len(self.deque)
28+
29+
# Test cases
30+
deque = Deque()
31+
deque.enqueue_front(10)
32+
deque.enqueue_front(20)
33+
deque.enqueue_rear(30)
34+
assert deque.dequeue_front() == 20
35+
assert deque.dequeue_rear() == 30
36+
assert deque.size() == 1
37+
assert deque.is_empty() == False
38+
assert deque.dequeue_front() == 10
39+
assert deque.is_empty() == True
40+
assert deque.size() == 0

Diff for: Practice Concepts/Data Structures/priority_q.py

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import heapq
2+
3+
class PriorityQueue:
4+
def __init__(self):
5+
self.queue = []
6+
7+
def enqueue(self, item):
8+
heapq.heappush(self.queue, item) # Push item while maintaining heap order
9+
10+
def dequeue(self):
11+
if not self.is_empty():
12+
return heapq.heappop(self.queue) # Remove and return the smallest item
13+
raise IndexError("Dequeue from an empty queue")
14+
15+
def is_empty(self):
16+
return len(self.queue) == 0
17+
18+
def size(self):
19+
return len(self.queue)
20+
21+
def front(self):
22+
if not self.is_empty():
23+
return self.queue[0]
24+
raise IndexError("Front from an empty queue")
25+
26+
def rear(self):
27+
if not self.is_empty():
28+
return self.queue[-1]
29+
raise IndexError("Rear from an empty queue")
30+
31+
# Test Cases
32+
queue = PriorityQueue()
33+
queue.enqueue(30)
34+
queue.enqueue(10)
35+
queue.enqueue(20)
36+
assert queue.front() == 10
37+
assert queue.rear() == 20
38+
assert queue.dequeue() == 10
39+
assert queue.front() == 20
40+
assert queue.rear() == 30
41+
assert queue.dequeue() == 20
42+
assert queue.front() == 30
43+
assert queue.rear() == 30
44+
assert queue.dequeue() == 30
45+
assert queue.is_empty() == True

Diff for: README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
- Space: O(n)
123123
- Time Complexities (Enqueue, Dequeue, Peek): O(1)
124124

125-
- Priority Queue (TODO)
125+
- [Priority Queue](/Practice%20Concepts/Data%20Structures/priority_q.py)
126126

127127
- Each element is linked with a priority value - served on the basis of their priority.
128128
- If elements have the same priority, they are then served according to their order in the queue.
@@ -131,7 +131,7 @@
131131
- Space: O(n)
132132
- Time Complexities (Enqueue, Dequeue, Peek): O(logn), O(1)
133133

134-
- Deque (Double Ended Queues)
134+
- [Deque (Double Ended Queues)](/Practice%20Concepts/Data%20Structures/dequeue.py)
135135
- Flexible, allowing addition and removal from both ends.
136136
- Space: O(n)
137137
- Time Complexities (Enqueue, Dequeue, Peek): O(1)

0 commit comments

Comments
 (0)