I found a tutorial on implementing a deque using a circular array. I changed the implementation but I am not sure if it is correct or not.
So I have one question:
- I wrote code that uses an
addCount
field to record whether there are any additions, but I'm not sure if it's correct? If not, please tell me where I made an error.
class Deque {
static final int MAX = 100;
int arr[];
int front;
int rear;
int size;
int addCount;
public Deque(int size) {
arr = new int[size];
front = 0;
rear = 0;
this.size = size;
addCount = 0;
}
// Checks whether Deque is full or not.
boolean isFull() {
return front == rear && !isEmpty();
}
// Checks whether Deque is empty or not.
boolean isEmpty() {
return front == rear && addCount == 0;
}
// Inserts an element at front
void insertfront(int key) {
if (isFull())
return;
addCount++;
arr[front] = key;
front = front + 1;
front %= this.size;
}
// function to inset element at rear end
// of Deque.
void insertrear(int key) {
if (isFull())
return;
addCount++;
rear = (rear - 1) % this.size;
arr[rear + this.size] = key;
}
// Deletes element at front end of Deque
void deletefront() {
if (isEmpty())
return;
addCount--;
front = (front - 1) % this.size;
}
// Delete element at rear end of Deque
void deleterear() {
if (isEmpty())
return;
addCount--;
rear = (rear + 1) % this.size;
}
// Returns front element of Deque
int getFront() {
int getFront = front-1;
if (getFront < 0)
getFront += this.size;
return arr[getFront % this.size];
}
// function return rear element of Deque
int getRear() {
int getRearIndex = rear + this.size;
return arr[getRearIndex % this.size];
}
// Driver program to test above function
public static void main(String[] args) {
Deque dq = new Deque(5);
System.out.println("Insert element at rear end : 5 ");
dq.insertrear(5);
System.out.println("insert element at rear end : 10 ");
dq.insertrear(10);
System.out.println("get rear element : " + dq.getRear());
dq.deleterear();
System.out.println("After delete rear element new rear become : " + dq.getRear());
System.out.println("inserting element at front end");
dq.insertfront(15);
System.out.println("get front element: " + dq.getFront());
dq.deletefront();
System.out.println("After delete front element new front become : " + +dq.getFront());
}
}