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 }