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 Inputstring 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 (nothrowint[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 = 0i < numi++)
    {
        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(datacontent);
            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 = fronti <= reari++)
        {
            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 (nothrowDEQueue();

    if (!deq)
    {
        cout << "\nMemory Allocation Failed\n";
        return 0;
    }

    while (true)
    {
        cout << content;
        cin >> userInput;
        userInput = checkInput(userInputcontent);

        switch (userInput)
        {
        case 1:
            if (isCreated)
            {
                cout << "The Queue is Already Created\n";
                break;
            }

            cout << content1;
            cin >> numOfElements;
            numOfElements = checkInput(numOfElementscontent1);
            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

Popular posts from this blog

Ticket Booking System

Student Database

Generalised Linked List