I am trying DeQue
implementation in C++. I am getting Segmentation fault on calling insertFront
function. I am not getting what is wrong in the code. Please help me to identify the cause. Here is the code:
#include <iostream>
using namespace std;
#define MAX 100
class DeQueue {
int arr[MAX];
int front;
int rear;
int size;
public:
DeQueue(int size){
front = -1;
rear = -1;
this->size = size;
}
void insertFront(int n);
void insertRear(int n);
int deleteFront();
int deleteRear();
bool isEmpty();
bool isFull();
int getFront();
int getRear();
};
bool DeQueue::isEmpty(){
return (((front - 1) % size == rear) || (front == -1 && rear == -1));
}
bool DeQueue::isFull(){
return ((front - 2) % size == rear);
}
void DeQueue::insertFront(int n){
if(isFull()){
cout << "Stack overflow!" << endl;
return;
}
if(front == -1 && rear == -1)
front = rear = size - 1;
else
front = (front - 1) % size;
arr[front] = n;
}
void DeQueue::insertRear(int n){
if(isFull()){
cout << "Stack overflow!" << endl;
return;
}
if(front == -1 && rear == -1)
front = rear = 0;
else
rear = (rear + 1) % size;
arr[rear] = n;
}
int DeQueue::deleteFront(){
if(isEmpty()){
cout << "Stack underflow!" << endl;
return 0;
}
int temp = arr[front];
front = (front + 1) % size;
return temp;
}
int DeQueue::deleteRear(){
if(isEmpty()){
cout << "Stack underflow!" << endl;
return 0;
}
int temp = arr[rear];
rear = (rear - 1) % size;
return temp;
}
int DeQueue::getFront(){
if(isEmpty()){
cout << "Stack underflow!" << endl;
return 0;
}
return arr[front];
}
int DeQueue::getRear(){
if(isEmpty()){
cout << "Stack underflow!" << endl;
return 0;
}
return arr[rear];
}
int main() {
DeQueue dq(5);
cout << "Insert element at rear end : 5 \n";
dq.insertRear(5);
cout << "insert element at rear end : 10 \n";
dq.insertRear(10);
cout << "get rear element " << " " << dq.getRear() << endl;
dq.deleteRear();
cout << "After delete rear element new rear" << " become " << dq.getRear() << endl;
cout << "inserting element at front end \n";
dq.insertFront(15);
cout << "get front element " << " " << dq.getFront() << endl;
dq.deleteFront();
cout << "After delete front element new " << "front become " << dq.getFront() << endl;
return 0;
}
Output:
Insert element at rear end : 5
insert element at rear end : 10
get rear element 10
After delete rear element new rear become 5
/usr/bin/timeout: the monitored command dumped core
sh: line 1: 17584 Segmentation fault /usr/bin/timeout 10s main