#include <stdio.
h>
#define MAX 5
int deque[MAX];
int front = -1, rear = -1;
// Insert at front
void insert_front(int item) {
if ((front == 0 && rear == MAX-1) || (front == rear+1)) {
printf("Deque Overflow\n");
return;
}
if (front == -1) {
front = rear = 0;
} else if (front == 0) {
front = MAX-1;
} else {
front = front - 1;
}
deque[front] = item;
printf("%d inserted at front\n", item);
}
// Insert at rear
void insert_rear(int item) {
if ((front == 0 && rear == MAX-1) || (front == rear+1)) {
printf("Deque Overflow\n");
return;
}
if (front == -1) {
front = rear = 0;
} else if (rear == MAX-1) {
rear = 0;
} else {
rear = rear + 1;
}
deque[rear] = item;
printf("%d inserted at rear\n", item);
}
// Delete from front
void delete_front() {
if (front == -1) {
printf("Deque Underflow\n");
return;
}
printf("Deleted from front: %d\n", deque[front]);
if (front == rear) {
front = rear = -1;
} else if (front == MAX-1) {
front = 0;
} else {
front = front + 1;
}
}
// Delete from rear
void delete_rear() {
if (front == -1) {
printf("Deque Underflow\n");
return;
}
printf("Deleted from rear: %d\n", deque[rear]);
if (front == rear) {
front = rear = -1;
} else if (rear == 0) {
rear = MAX-1;
} else {
rear = rear - 1;
}
}
// Display elements
void display() {
if (front == -1) {
printf("Deque is empty\n");
return;
}
printf("Deque elements: ");
int i = front;
while (1) {
printf("%d ", deque[i]);
if (i == rear) break;
i = (i + 1) % MAX;
}
printf("\n");
}
int main() {
int choice, item;
while (1) {
printf("\n--- Double Ended Queue Menu ---\n");
printf("1. Insert at Front\n");
printf("2. Insert at Rear\n");
printf("3. Delete from Front\n");
printf("4. Delete from Rear\n");
printf("5. Display\n");
printf("6. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter element: ");
scanf("%d", &item);
insert_front(item);
break;
case 2:
printf("Enter element: ");
scanf("%d", &item);
insert_rear(item);
break;
case 3:
delete_front();
break;
case 4:
delete_rear();
break;
case 5:
display();
break;
case 6:
return 0;
default:
printf("Invalid choice!\n");
}
}
}
Algorithm
1. Insert at Front
Algorithm:
1. Check if deque is full:
(front == 0 && rear == MAX-1) || (front == rear + 1)
2. If full → Overflow.
3. If deque is empty (front == -1):
o Set front = rear = 0.
4. Else if front == 0:
o Set front = MAX-1.
5. Else:
o front = front - 1
6. Insert element at deque[front].
2. Insert at Rear
Algorithm:
1. Check if deque is full:
(front == 0 && rear == MAX-1) || (front == rear + 1)
2. If full → Overflow.
3. If deque is empty (front == -1):
o Set front = rear = 0.
4. Else if rear == MAX-1:
o Set rear = 0.
5. Else:
o rear = rear + 1
6. Insert element at deque[rear].
3. Delete from Front
Algorithm:
1. Check if deque is empty:
front == -1
2. If empty → Underflow.
3. Store deque[front] as deleted item.
4. If only one element (front == rear):
o Set front = rear = -1.
5. Else if front == MAX-1:
o Set front = 0.
6. Else:
o front = front + 1.
4. Delete from Rear
Algorithm:
1. Check if deque is empty:
front == -1
2. If empty → Underflow.
3. Store deque[rear] as deleted item.
4. If only one element (front == rear):
o Set front = rear = -1.
5. Else if rear == 0:
o Set rear = MAX-1.
6. Else:
o rear = rear - 1.
5. Display Deque
Algorithm:
1. If front == -1 → Empty.
2. Else:
Start from i = front, keep printing deque[i], move i = (i + 1) % MAX, stop
when i == (rear + 1) % MAX.