-
Notifications
You must be signed in to change notification settings - Fork 21.1k
Expand file tree
/
Copy pathDequeUsingArray.java
More file actions
159 lines (135 loc) · 3.55 KB
/
DequeUsingArray.java
File metadata and controls
159 lines (135 loc) · 3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package com.thealgorithms.datastructures.queues;
/**
* Implementation of a Double Ended Queue (Deque) using Array
* A deque allows insertion and deletion from both front and rear ends.
* Author: Sonu Dodwariya (Hacktoberfest 2025)
*/
public class DequeUsingArray {
private int[] arr;
private int front;
private int rear;
private int size;
// Constructor
public DequeUsingArray(int size) {
arr = new int[size];
front = -1;
rear = 0;
this.size = size;
}
// Check if deque is full
public boolean isFull() {
return (front == 0 && rear == size - 1) || (front == rear + 1);
}
// Check if deque is empty
public boolean isEmpty() {
return (front == -1);
}
// Insert element at front
public void insertFront(int key) {
if (isFull()) {
System.out.println("Deque is full!");
return;
}
// First element
if (front == -1) {
front = 0;
rear = 0;
} else if (front == 0)
front = size - 1;
else
front = front - 1;
arr[front] = key;
}
// Insert element at rear
public void insertRear(int key) {
if (isFull()) {
System.out.println("Deque is full!");
return;
}
// First element
if (front == -1) {
front = 0;
rear = 0;
} else if (rear == size - 1)
rear = 0;
else
rear = rear + 1;
arr[rear] = key;
}
// Delete element at front
public void deleteFront() {
if (isEmpty()) {
System.out.println("Deque is empty!");
return;
}
// Single element
if (front == rear) {
front = -1;
rear = -1;
} else if (front == size - 1)
front = 0;
else
front = front + 1;
}
// Delete element at rear
public void deleteRear() {
if (isEmpty()) {
System.out.println("Deque is empty!");
return;
}
// Single element
if (front == rear) {
front = -1;
rear = -1;
} else if (rear == 0)
rear = size - 1;
else
rear = rear - 1;
}
// Get front element
public int getFront() {
if (isEmpty()) {
System.out.println("Deque is empty!");
return -1;
}
return arr[front];
}
// Get rear element
public int getRear() {
if (isEmpty() || rear < 0) {
System.out.println("Deque is empty!");
return -1;
}
return arr[rear];
}
// Display all elements
public void display() {
if (isEmpty()) {
System.out.println("Deque is empty!");
return;
}
System.out.print("Deque elements: ");
int i = front;
while (true) {
System.out.print(arr[i] + " ");
if (i == rear)
break;
i = (i + 1) % size;
}
System.out.println();
}
// Main method for testing
public static void main(String[] args) {
DequeUsingArray dq = new DequeUsingArray(5);
dq.insertRear(10);
dq.insertRear(20);
dq.insertFront(5);
dq.insertFront(2);
dq.display();
System.out.println("Front element: " + dq.getFront());
System.out.println("Rear element: " + dq.getRear());
dq.deleteFront();
dq.deleteRear();
dq.display();
}
}