File tree 3 files changed +87
-2
lines changed
Practice Concepts/Data Structures
3 files changed +87
-2
lines changed Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change 122
122
- Space: O(n)
123
123
- Time Complexities (Enqueue, Dequeue, Peek): O(1)
124
124
125
- - Priority Queue (TODO )
125
+ - [ Priority Queue] ( /Practice%20Concepts/Data%20Structures/priority_q.py )
126
126
127
127
- Each element is linked with a priority value - served on the basis of their priority.
128
128
- If elements have the same priority, they are then served according to their order in the queue.
131
131
- Space: O(n)
132
132
- Time Complexities (Enqueue, Dequeue, Peek): O(logn), O(1)
133
133
134
- - Deque (Double Ended Queues)
134
+ - [ Deque (Double Ended Queues) ] ( /Practice%20Concepts/Data%20Structures/dequeue.py )
135
135
- Flexible, allowing addition and removal from both ends.
136
136
- Space: O(n)
137
137
- Time Complexities (Enqueue, Dequeue, Peek): O(1)
You can’t perform that action at this time.
0 commit comments