Techno Blender
Digitally Yours.

Most efficient way to implement Stack and Queue together

0 53


#include <bits/stdc++.h>

using namespace std;

  

#define MAX 100

  

class Deque {

    int arr[MAX];

    int front;

    int rear;

    int size;

  

public:

    Deque(int size)

    {

        front = -1;

        rear = 0;

        this->size = size;

    }

  

    

    void insertfront(int key);

    void insertrear(int key);

    void deletefront();

    void deleterear();

    bool isFull();

    bool isEmpty();

    int getFront();

    int getRear();

};

  

bool Deque::isFull()

{

    return ((front == 0 && rear == size - 1)

            || front == rear + 1);

}

  

bool Deque::isEmpty() { return (front == -1); }

  

void Deque::insertfront(int key)

{

  

    

    if (isFull()) {

        cout << "Overflow\n"

             << endl;

        return;

    }

  

    

    if (front == -1) {

        front = 0;

        rear = 0;

    }

  

    

    else if (front == 0)

        front = size - 1;

  

    

    else

        front = front - 1;

  

    

    arr[front] = key;

}

  

void Deque::insertrear(int key)

{

    if (isFull()) {

        cout << " Overflow\n " << endl;

        return;

    }

  

    

    if (front == -1) {

        front = 0;

        rear = 0;

    }

  

    

    else if (rear == size - 1)

        rear = 0;

  

    

    else

        rear = rear + 1;

  

    

    arr[rear] = key;

}

  

void Deque::deletefront()

{

  

    

    if (isEmpty()) {

        cout << "Queue Underflow\n"

             << endl;

        return;

    }

  

    

    if (front == rear) {

        front = -1;

        rear = -1;

    }

    else

  

        

        if (front == size - 1)

        front = 0;

  

    

    

    else

        front = front + 1;

}

  

void Deque::deleterear()

{

    if (isEmpty()) {

        cout << " Underflow\n"

             << endl;

        return;

    }

  

    

    if (front == rear) {

        front = -1;

        rear = -1;

    }

    else if (rear == 0)

        rear = size - 1;

    else

        rear = rear - 1;

}

  

int Deque::getFront()

{

  

    

    if (isEmpty()) {

        cout << " Underflow\n"

             << endl;

        return -1;

    }

    return arr[front];

}

  

int Deque::getRear()

{

  

    

    if (isEmpty() || rear < 0) {

        cout << " Underflow\n"

             << endl;

        return -1;

    }

    return arr[rear];

}

  

int main()

{

    Deque 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 : 15 \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;

}


#include <bits/stdc++.h>

using namespace std;

  

#define MAX 100

  

class Deque {

    int arr[MAX];

    int front;

    int rear;

    int size;

  

public:

    Deque(int size)

    {

        front = -1;

        rear = 0;

        this->size = size;

    }

  

    

    void insertfront(int key);

    void insertrear(int key);

    void deletefront();

    void deleterear();

    bool isFull();

    bool isEmpty();

    int getFront();

    int getRear();

};

  

bool Deque::isFull()

{

    return ((front == 0 && rear == size - 1)

            || front == rear + 1);

}

  

bool Deque::isEmpty() { return (front == -1); }

  

void Deque::insertfront(int key)

{

  

    

    if (isFull()) {

        cout << "Overflow\n"

             << endl;

        return;

    }

  

    

    if (front == -1) {

        front = 0;

        rear = 0;

    }

  

    

    else if (front == 0)

        front = size - 1;

  

    

    else

        front = front - 1;

  

    

    arr[front] = key;

}

  

void Deque::insertrear(int key)

{

    if (isFull()) {

        cout << " Overflow\n " << endl;

        return;

    }

  

    

    if (front == -1) {

        front = 0;

        rear = 0;

    }

  

    

    else if (rear == size - 1)

        rear = 0;

  

    

    else

        rear = rear + 1;

  

    

    arr[rear] = key;

}

  

void Deque::deletefront()

{

  

    

    if (isEmpty()) {

        cout << "Queue Underflow\n"

             << endl;

        return;

    }

  

    

    if (front == rear) {

        front = -1;

        rear = -1;

    }

    else

  

        

        if (front == size - 1)

        front = 0;

  

    

    

    else

        front = front + 1;

}

  

void Deque::deleterear()

{

    if (isEmpty()) {

        cout << " Underflow\n"

             << endl;

        return;

    }

  

    

    if (front == rear) {

        front = -1;

        rear = -1;

    }

    else if (rear == 0)

        rear = size - 1;

    else

        rear = rear - 1;

}

  

int Deque::getFront()

{

  

    

    if (isEmpty()) {

        cout << " Underflow\n"

             << endl;

        return -1;

    }

    return arr[front];

}

  

int Deque::getRear()

{

  

    

    if (isEmpty() || rear < 0) {

        cout << " Underflow\n"

             << endl;

        return -1;

    }

    return arr[rear];

}

  

int main()

{

    Deque 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 : 15 \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;

}

FOLLOW US ON GOOGLE NEWS

Read original article here

Denial of responsibility! Techno Blender is an automatic aggregator of the all world’s media. In each content, the hyperlink to the primary source is specified. All trademarks belong to their rightful owners, all materials to their authors. If you are the owner of the content and do not want us to publish your materials, please contact us by email – [email protected]. The content will be deleted within 24 hours.

Leave a comment