diff --git a/contrib/ds-algorithms/deque.md b/contrib/ds-algorithms/deque.md index db489a8..2a5a77d 100644 --- a/contrib/ds-algorithms/deque.md +++ b/contrib/ds-algorithms/deque.md @@ -19,86 +19,134 @@ d = deque(iterable) # Create deque from iterable (optional) - append(x): Adds element x to the right end of the deque. - appendleft(x): Adds element x to the left end of the deque. + ### Program + ```py + from collections import deque + + # Initialize a deque + d = deque([1, 2, 3, 4, 5]) + print("Initial deque:", d) + + # Append elements + d.append(6) + print("After append(6):", d) + + # Append left + d.appendleft(0) + print("After appendleft(0):", d) + + ``` + ### Output + ```py + Initial deque: deque([1, 2, 3, 4, 5]) + After append(6): deque([1, 2, 3, 4, 5, 6]) + After appendleft(0): deque([0, 1, 2, 3, 4, 5, 6]) + ``` + 2. **Removing Elements**: - pop(): Removes and returns the rightmost element. - popleft(): Removes and returns the leftmost element. + ### Program + ```py + from collections import deque + + # Initialize a deque + d = deque([1, 2, 3, 4, 5]) + print("Initial deque:", d) + + # Pop from the right end + rightmost = d.pop() + print("Popped from right end:", rightmost) + print("Deque after pop():", d) + + # Pop from the left end + leftmost = d.popleft() + print("Popped from left end:", leftmost) + print("Deque after popleft():", d) + + ``` + + ### Output + ```py + Initial deque: deque([1, 2, 3, 4, 5]) + Popped from right end: 5 + Deque after pop(): deque([1, 2, 3, 4]) + Popped from left end: 1 + Deque after popleft(): deque([2, 3, 4]) + ``` + 3. **Accessing Elements**: - deque[index]: Accesses element at index. + ### Program + ```py + from collections import deque + + # Initialize a deque + d = deque([1, 2, 3, 4, 5]) + print("Initial deque:", d) + + # Accessing elements + print("Element at index 2:", d[2]) + + ``` + + ### Output + ```py + Initial deque: deque([1, 2, 3, 4, 5]) + Element at index 2: 3 + + ``` + 4. **Other Operations**: - extend(iterable): Extends deque by appending elements from iterable. - extendleft(iterable): Extends deque by appending elements from iterable to the left. - rotate(n): Rotates deque n steps to the right (negative n rotates left). + ### Program + ```py + from collections import deque + + # Initialize a deque + d = deque([1, 2, 3, 4, 5]) + print("Initial deque:", d) + + # Extend deque + d.extend([6, 7, 8]) + print("After extend([6, 7, 8]):", d) + + # Extend left + d.extendleft([-1, 0]) + print("After extendleft([-1, 0]):", d) + + # Rotate deque + d.rotate(2) + print("After rotate(2):", d) + + # Rotate left + d.rotate(-3) + print("After rotate(-3):", d) + + ``` + + ### Output + ```py + Initial deque: deque([1, 2, 3, 4, 5]) + After extend([6, 7, 8]): deque([1, 2, 3, 4, 5, 6, 7, 8]) + After extendleft([-1, 0]): deque([0, -1, 1, 2, 3, 4, 5, 6, 7, 8]) + After rotate(2): deque([7, 8, 0, -1, 1, 2, 3, 4, 5, 6]) + After rotate(-3): deque([1, 2, 3, 4, 5, 6, 7, 8, 0, -1]) + + ``` + + ## Example -### 1. showing all the operations -```py -from collections import deque - -# Initialize a deque -d = deque([1, 2, 3, 4, 5]) -print("Initial deque:", d) - -# Append elements -d.append(6) -print("After append(6):", d) - -# Append left -d.appendleft(0) -print("After appendleft(0):", d) - -# Pop from the right end -rightmost = d.pop() -print("Popped from right end:", rightmost) -print("Deque after pop():", d) - -# Pop from the left end -leftmost = d.popleft() -print("Popped from left end:", leftmost) -print("Deque after popleft():", d) - -# Accessing elements -print("Element at index 2:", d[2]) - -# Extend deque -d.extend([6, 7, 8]) -print("After extend([6, 7, 8]):", d) - -# Extend left -d.extendleft([-1, 0]) -print("After extendleft([-1, 0]):", d) - -# Rotate deque -d.rotate(2) -print("After rotate(2):", d) - -# Rotate left -d.rotate(-3) -print("After rotate(-3):", d) -``` -Output -```py -Initial deque: deque([1, 2, 3, 4, 5]) -After append(6): deque([1, 2, 3, 4, 5, 6]) -After appendleft(0): deque([0, 1, 2, 3, 4, 5, 6]) -Popped from right end: 6 -Deque after pop(): deque([0, 1, 2, 3, 4, 5]) -Popped from left end: 0 -Deque after popleft(): deque([1, 2, 3, 4, 5]) -Element at index 2: 3 -After extend([6, 7, 8]): deque([1, 2, 3, 4, 5, 6, 7, 8]) -After extendleft([-1, 0]): deque([0, -1, 1, 2, 3, 4, 5, 6, 7, 8]) -After rotate(2): deque([7, 8, 0, -1, 1, 2, 3, 4, 5, 6]) -After rotate(-3): deque([1, 2, 3, 4, 5, 6, 7, 8, 0, -1]) - -``` - -### 2. Finding Maximum in Sliding Window +### 1. Finding Maximum in Sliding Window ```py from collections import deque