bsc

Comprehensive codebase and coursework for the 4-year B.Sc. Computer Science Honours degree (WBSU)

git clone https://github.com/notamitgamer/bsc.git
· rebuilt hourlyOpen on GitHub
root / semester_2 / assignments / assignment_12.cpp

assignment_12.cpp (3112B)


      1 /* Create and perform different operations on Double-ended Queues using Linked List implementation. */
      2 
      3 #include <iostream>
      4 using namespace std;
      5 
      6 struct node {
      7     int data;
      8     node *prev = nullptr;
      9     node *next = nullptr;
     10 };
     11 
     12 class Deque {
     13 private:
     14     node *front, *rear;
     15 
     16 public:
     17     Deque() { front = nullptr; rear = nullptr; }
     18     bool isEmpty() { return (front == nullptr); }
     19 
     20     void insertFront() {
     21         node *newNode = new node;
     22         cout << "Enter the value: ";
     23         cin >> newNode->data;
     24         newNode->prev = nullptr;
     25         newNode->next = front;
     26         if (isEmpty()) front = rear = newNode;
     27         else { front->prev = newNode; front = newNode; }
     28     }
     29 
     30     void insertRear() {
     31         node *newNode = new node;
     32         cout << "Enter the value: ";
     33         cin >> newNode->data;
     34         newNode->next = nullptr;
     35         newNode->prev = rear;
     36         if (isEmpty()) front = rear = newNode;
     37         else { rear->next = newNode; rear = newNode; }
     38     }
     39 
     40     void deleteFront() {
     41         if (isEmpty()) { cout << "Deque Underflow!\n"; return; }
     42         node *temp = front;
     43         int val = temp->data;
     44         front = front->next;
     45         if (front == nullptr) rear = nullptr;
     46         else front->prev = nullptr;
     47         delete temp;
     48         cout << "Deleted from front: " << val << endl;
     49     }
     50 
     51     void deleteRear() {
     52         if (isEmpty()) { cout << "Deque Underflow!\n"; return; }
     53         node *temp = rear;
     54         int val = temp->data;
     55         rear = rear->prev;
     56         if (rear == nullptr) front = nullptr;
     57         else rear->next = nullptr;
     58         delete temp;
     59         cout << "Deleted from rear: " << val << endl;
     60     }
     61 
     62     void getFront() {
     63         if (isEmpty()) { cout << "Deque is empty!\n"; return; }
     64         cout << "Front element: " << front->data << endl;
     65     }
     66 
     67     void getRear() {
     68         if (isEmpty()) { cout << "Deque is empty!\n"; return; }
     69         cout << "Rear element: " << rear->data << endl;
     70     }
     71 
     72     void display() {
     73         if (isEmpty()) { cout << "Deque is empty!\n"; return; }
     74         node *temp = front;
     75         while (temp != nullptr) { cout << temp->data << " "; temp = temp->next; }
     76         cout << endl;
     77     }
     78 
     79     ~Deque() {
     80         node *temp;
     81         while (front != nullptr) { temp = front; front = front->next; delete temp; }
     82     }
     83 };
     84 
     85 int main() {
     86     Deque dq;
     87     int choice;
     88 
     89     while (true) {
     90         cout << "1.insertFront 2.insertRear 3.deleteFront 4.deleteRear\n"
     91              << "5.getFront 6.getRear 7.isEmpty 0.Display -1.Exit\n";
     92         cout << "Enter your choice: ";
     93         cin >> choice;
     94 
     95         switch (choice) {
     96             case 1: dq.insertFront(); break;
     97             case 2: dq.insertRear(); break;
     98             case 3: dq.deleteFront(); break;
     99             case 4: dq.deleteRear(); break;
    100             case 5: dq.getFront(); break;
    101             case 6: dq.getRear(); break;
    102             case 7: cout << (dq.isEmpty() ? "Empty\n" : "Not empty\n"); break;
    103             case 0: dq.display(); break;
    104             case -1: cout << "Exiting...\n"; return 0;
    105             default: cout << "Wrong choice.\n";
    106         }
    107     }
    108 }