Double-Ended Queue
#include <iostream>
using namespace std;
class DEQueue
{
int numOfElements = 10;
int *Queue;
int front;
int rear;
public:
DEQueue(); // Default Constructer
~DEQueue() // Destructer
{
delete[] Queue;
}
bool create(int);
bool isFull();
bool isEmpty();
bool enqueueFront(int);
int dequeueFront();
bool enqueueRear(int);
int dequeueRear();
void traverseDEQueue();
};
// Function To Handle Incorrect User Input
template <typename T>
T checkInput(T Input, string content)
{
while (!cin.good())
{
cout << "\nWrong Input, Please Enter it Correctly\n";
cin.clear(); // Clears The Previous Input
cin.ignore(100, '\n'); // Ignores The Incorrect Input Upto 100 Characters
cout << content;
cin >> Input;
}
while (Input < 0)
{
cout << "\nThis Input Cannot Be Negative\n";
cin.clear(); // Clears The Previous Input
cin.ignore(100, '\n'); // Ignores The Incorrect Input Upto 100 Characters
cout << content;
cin >> Input;
}
return Input;
}
DEQueue::DEQueue()
{
front = -1;
rear = -1;
Queue = new (nothrow) int[numOfElements];
if (!Queue)
{
cout << "\nMemory Allocation Failed\n";
exit(0);
}
}
bool DEQueue::isEmpty()
{
if (front == -1 && rear == -1)
{
return 1;
}
return 0;
}
bool DEQueue::isFull()
{
if (front == 0 && rear == (numOfElements - 1))
{
return 1;
}
return 0;
}
bool DEQueue::create(int num)
{
int data;
char content[25];
for (int i = 0; i < num; i++)
{
if (isEmpty())
{
sprintf(content, "\nEnter The Value of Element %d : ", i + 1);
cout << content;
cin >> data;
front++;
rear++;
Queue[rear] = data;
}
else
{
sprintf(content, "\nEnter The Value of Element %d : ", i + 1);
cout << content;
cin >> data;
data = checkInput(data, content);
rear++;
Queue[rear] = data;
}
}
return true;
}
bool DEQueue::enqueueFront(int val)
{
if (front == 0)
{
cout << "\nQueue OverFlow\n";
return 0;
}
else
{
if (isEmpty())
{
front++;
rear++;
Queue[front] = val;
return 1;
}
front--;
Queue[front] = val;
return 1;
}
}
int DEQueue::dequeueFront()
{
int data = -1;
if (isEmpty())
{
cout << "\nQueue UnderFlow\n";
return data;
}
else
{
if (front == rear)
{
data = Queue[front];
front = rear = -1;
return data;
}
data = Queue[front];
front++;
return data;
}
}
bool DEQueue::enqueueRear(int val)
{
if (rear == (numOfElements - 1))
{
cout << "\nQueue OverFlow\n";
return 0;
}
else
{
if (isEmpty())
{
front++;
rear++;
Queue[rear] = val;
return 1;
}
rear++;
Queue[rear] = val;
return 1;
}
}
int DEQueue::dequeueRear()
{
int data = -1;
if (isEmpty())
{
cout << "\nQueue UnderFlow\n";
return data;
}
else
{
if (front == rear)
{
data = Queue[front];
front = rear = -1;
return data;
}
data = Queue[rear];
rear--;
return data;
}
}
void DEQueue::traverseDEQueue()
{
if (isEmpty())
{
cout << "\nQueue is Empty\n";
}
else
{
for (int i = front; i <= rear; i++)
{
cout << Queue[i] << " ";
}
cout << "\n";
}
}
int main()
{
int numOfElements = 0;
int userInput;
int data;
int flag;
bool isCreated;
string content("\n\t\t1. Press 1 To Create Queue\n\t\t2. Press 2 To EnQueue At Front\n\t\t3. Press 3 To EnQueue At Rear\n\t\t4. Press 4 To DeQueue At Front\n\t\t5. Press 5 To DeQueue At Rear\n\t\t6. Press 6 To Traverse Queue\n\t\t7. Press 7 To Print Length of Queue\n\t\t8. Press 8 To Exit\n>>>>");
string content1("\nEnter The Number of Elements\n");
DEQueue *deq = new (nothrow) DEQueue();
if (!deq)
{
cout << "\nMemory Allocation Failed\n";
return 0;
}
while (true)
{
cout << content;
cin >> userInput;
userInput = checkInput(userInput, content);
switch (userInput)
{
case 1:
if (isCreated)
{
cout << "The Queue is Already Created\n";
break;
}
cout << content1;
cin >> numOfElements;
numOfElements = checkInput(numOfElements, content1);
isCreated = deq->create(numOfElements);
break;
case 2:
cout << "\nEnter The Value of Element : ";
cin >> data;
flag = deq->enqueueFront(data);
if (flag == 1)
{
cout << "\nElements Inserted\n";
numOfElements++;
}
break;
case 3:
cout << "\nEnter The Value of Element : ";
cin >> data;
flag = deq->enqueueRear(data);
if (flag == 1)
{
cout << "\nElement Inserted\n";
numOfElements++;
}
break;
case 4:
flag = deq->dequeueFront();
if (flag != -1)
{
cout << "Element Deleted\n";
numOfElements--;
}
break;
case 5:
flag = deq->dequeueRear();
if (flag != -1)
{
cout << "Element Deleted\n";
numOfElements--;
}
break;
case 6:
cout << "Queue : ";
deq->traverseDEQueue();
break;
case 7:
cout << "Length : " << numOfElements;
break;
case 8:
exit(0);
default:
cout << "Please Enter Correct Input\n";
break;
}
}
delete deq;
return 0;
}
// Output
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>1
// Enter The Number of Elements
// 4
// Enter The Value of Element 1 : 2
// Enter The Value of Element 2 : 4
// Enter The Value of Element 3 : 6
// Enter The Value of Element 4 : 8
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>6
// Queue : 2 4 6 8
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>7
// Length : 4
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>2
// Enter The Value of Element : 11
// Elements Inserted
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>6
// Queue : 11 2 4 6 8
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>7
// Length : 5
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>3
// Enter The Value of Element : 15
// Element Inserted
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>6
// Queue : 11 2 4 6 8 15
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>7
// Length : 6
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>4
// Element Deleted
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>6
// Queue : 2 4 6 8 15
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>7
// Length : 5
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>5
// Element Deleted
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>6
// Queue : 2 4 6 8
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>7
// Length : 4
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>we
// Wrong Input, Please Enter it Correctly
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>21
// Please Enter Correct Input
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>1
// The Queue is Already Created
// 1. Press 1 To Create Queue
// 2. Press 2 To EnQueue At Front
// 3. Press 3 To EnQueue At Rear
// 4. Press 4 To DeQueue At Front
// 5. Press 5 To DeQueue At Rear
// 6. Press 6 To Traverse Queue
// 7. Press 7 To Print Length of Queue
// 8. Press 8 To Exit
// >>>>8
Comments
Post a Comment