0% found this document useful (0 votes)
3 views

Double_Ended_Queue_Algorithm

The document outlines the implementation of a double-ended queue (deque) algorithm, detailing initialization, operations for pushing and popping elements from both ends, and methods for checking if the deque is empty or full. It includes a Python class implementation with methods for each operation, such as `push_front`, `push_back`, `pop_front`, and `pop_back`, along with traversal and peeking functionalities. Example usage demonstrates how to create a deque, add elements, and display its contents.

Uploaded by

projecthotel69
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Double_Ended_Queue_Algorithm

The document outlines the implementation of a double-ended queue (deque) algorithm, detailing initialization, operations for pushing and popping elements from both ends, and methods for checking if the deque is empty or full. It includes a Python class implementation with methods for each operation, such as `push_front`, `push_back`, `pop_front`, and `pop_back`, along with traversal and peeking functionalities. Example usage demonstrates how to create a deque, add elements, and display its contents.

Uploaded by

projecthotel69
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 7

Double-Ended Queue Algorithm

Initialize

1. Create a deque with size `capacity`.


2. Maintain:
- `front` pointer initialized to `-1` (empty).
- `rear` pointer initialized to `-1` (empty).
- `size` initialized to `0`.

Push to Front (`push_front(x)`)

1. Check if deque is full:


- If `size == capacity`, return "Deque is full".
2. If deque is empty (`size == 0`):
- Set `front = rear = 0`.
3. Otherwise:
- Update `front = (front - 1 + capacity) % capacity`.
4. Insert `x` at `front`.
5. Increment `size`.

Push to Rear (`push_back(x)`)

1. Check if deque is full:


- If `size == capacity`, return "Deque is full".
2. If deque is empty (`size == 0`):
- Set `front = rear = 0`.
3. Otherwise:
- Update `rear = (rear + 1) % capacity`.
4. Insert `x` at `rear`.
5. Increment `size`.

Pop from Front (`pop_front()`)

1. Check if deque is empty:


- If `size == 0`, return "Deque is empty".
2. Remove the element at `front`.
3. If deque becomes empty after removal (`size == 1`):
- Reset `front = rear = -1`.
4. Otherwise:
- Update `front = (front + 1) % capacity`.
5. Decrement `size`.

Pop from Rear (`pop_back()`)

1. Check if deque is empty:


- If `size == 0`, return "Deque is empty".
2. Remove the element at `rear`.
3. If deque becomes empty after removal (`size == 1`):
- Reset `front = rear = -1`.
4. Otherwise:
- Update `rear = (rear - 1 + capacity) % capacity`.
5. Decrement `size`.

Peek Front (`peek_front()`)

1. Check if deque is empty:


- If `size == 0`, return "Deque is empty".
2. Return the element at `front`.

Peek Rear (`peek_back()`)

1. Check if deque is empty:


- If `size == 0`, return "Deque is empty".
2. Return the element at `rear`.

Check if Empty (`is_empty()`)


1. Return `size == 0`.

Check if Full (`is_full()`)


1. Return `size == capacity`.

Traversal (`traverse()`)

1. Check if deque is empty:


- If `size == 0`, return "Deque is empty".
2. Initialize `i = front` and loop `size` times:
- Print or store `deque[i]`.
- Update `i = (i + 1) % capacity`.

Example Implementation in Python

class Deque:
def __init__(self, capacity):
self.capacity = capacity
self.size = 0
self.front = -1
self.rear = -1
self.data = [None] * capacity

def is_empty(self):
return self.size == 0

def is_full(self):
return self.size == self.capacity

def push_front(self, x):


if self.is_full():
print("Deque is full")
return
if self.is_empty():
self.front = self.rear = 0
else:
self.front = (self.front - 1 + self.capacity) % self.capacity
self.data[self.front] = x
self.size += 1

def push_back(self, x):


if self.is_full():
print("Deque is full")
return
if self.is_empty():
self.front = self.rear = 0
else:
self.rear = (self.rear + 1) % self.capacity
self.data[self.rear] = x
self.size += 1

def pop_front(self):
if self.is_empty():
print("Deque is empty")
return None
result = self.data[self.front]
if self.size == 1:
self.front = self.rear = -1
else:
self.front = (self.front + 1) % self.capacity
self.size -= 1
return result

def pop_back(self):
if self.is_empty():
print("Deque is empty")
return None
result = self.data[self.rear]
if self.size == 1:
self.front = self.rear = -1
else:
self.rear = (self.rear - 1 + self.capacity) % self.capacity
self.size -= 1
return result

def peek_front(self):
if self.is_empty():
print("Deque is empty")
return None
return self.data[self.front]

def peek_back(self):
if self.is_empty():
print("Deque is empty")
return None
return self.data[self.rear]

def traverse(self):
if self.is_empty():
print("Deque is empty")
return
i = self.front
for _ in range(self.size):
print(self.data[i], end=" ")
i = (i + 1) % self.capacity
print()
# Example Usage
deque = Deque(5)
deque.push_back(10)
deque.push_front(20)
deque.push_back(30)
deque.traverse() # Output: 20 10 30
deque.pop_front()
deque.traverse() # Output: 10 30

Example Implementation in Python

class Deque:
def __init__(self, capacity):
self.capacity = capacity
self.size = 0
self.front = -1
self.rear = -1
self.data = [None] * capacity

def is_empty(self):
return self.size == 0

def is_full(self):
return self.size == self.capacity

def push_front(self, x):


if self.is_full():
print("Deque is full")
return
if self.is_empty():
self.front = self.rear = 0
else:
self.front = (self.front - 1 + self.capacity) % self.capacity
self.data[self.front] = x
self.size += 1

def push_back(self, x):


if self.is_full():
print("Deque is full")
return
if self.is_empty():
self.front = self.rear = 0
else:
self.rear = (self.rear + 1) % self.capacity
self.data[self.rear] = x
self.size += 1

def pop_front(self):
if self.is_empty():
print("Deque is empty")
return None
result = self.data[self.front]
if self.size == 1:
self.front = self.rear = -1
else:
self.front = (self.front + 1) % self.capacity
self.size -= 1
return result

def pop_back(self):
if self.is_empty():
print("Deque is empty")
return None
result = self.data[self.rear]
if self.size == 1:
self.front = self.rear = -1
else:
self.rear = (self.rear - 1 + self.capacity) % self.capacity
self.size -= 1
return result

def peek_front(self):
if self.is_empty():
print("Deque is empty")
return None
return self.data[self.front]

def peek_back(self):
if self.is_empty():
print("Deque is empty")
return None
return self.data[self.rear]

def traverse(self):
if self.is_empty():
print("Deque is empty")
return
i = self.front
for _ in range(self.size):
print(self.data[i], end=" ")
i = (i + 1) % self.capacity
print()

# Example Usage
deque = Deque(5)
deque.push_back(10)
deque.push_front(20)
deque.push_back(30)
deque.traverse() # Output: 20 10 30
deque.pop_front()
deque.traverse() # Output: 10 30

You might also like