DataStructuresAndAlgorithms/Practical-E20 (Priority Queue) - OLD.cpp

136 lines
3.6 KiB
C++

/*
THIS CODE HAS BEEN TESTED AND IS FULLY OPERATIONAL.
Problem Statement: Consider a scenario for Hospital to cater services to different kinds of patients as Serious (top priority), b) non-serious (medium priority), c) General Checkup (Least priority). Implement the priority queue to cater services to the patients.
Code from DataStructuresAndAlgorithms (SPPU - Second Year - Computer Engineering - Content) repository on KSKA Git: https://git.kska.io/sppu-se-comp-content/DataStructuresAndAlgorithms/
*/
// BEGINNING OF CODE
#include <iostream>
#define MAX_SIZE 10
using namespace std;
class priority_queue {
private:
string queue[MAX_SIZE];
int priority_val[MAX_SIZE];
int front;
int rear;
public:
priority_queue() {
front = -1;
rear = -1;
}
bool is_empty() { return front == -1; }
bool is_full() { return rear == MAX_SIZE - 1; }
void enqueue(string data, int priority) {
if (is_full()) {
cout << "Queue is full." << endl;
return;
}
if (is_empty()) {
front = 0;
rear = 0;
queue[rear] = data;
priority_val[rear] = priority;
} else {
int i;
rear++;
for (i = rear-1; i >= front; i--) {
if (priority_val[i] < priority) {
queue[i + 1] = queue[i];
priority_val[i + 1] = priority_val[i];
} else {
break;
}
}
queue[i + 1] = data;
priority_val[i + 1] = priority;
}
}
string dequeue() {
if (is_empty()) {
cout << "Queue is empty." << endl;
return "";
}
string data = queue[front];
if (front == rear) {
front = -1;
rear = -1;
} else {
front++;
}
return data;
}
int get_priority() {
if (is_empty()) {
return -1;
}
return priority_val[front];
}
void display() {
if (is_empty()) {
cout << "Queue is empty." << endl;
return;
}
cout << "Queue is:" << endl;
for (int i = front; i <= rear; i++) {
cout << priority_val[i] << ":\t" << queue[i] << endl;
}
cout << endl;
}
};
int main() {
priority_queue queue;
int ch = 0;
int priority;
string name;
do {
cout << "--- MAIN MENU ---" << endl;
cout << "1 -> Add patient" << endl;
cout << "2 -> Remove patient" << endl;
cout << "3 -> Display queue" << endl;
cout << "4 -> Exit" << endl;
cout << "Choose an option (1-4):\t";
cin >> ch;
switch (ch) {
case 1:
cout << "Patient name:\t";
cin >> name;
cout << "Priority (0: General Checkup; 1: Non-serious; 2: Serious):\t";
cin >> priority;
queue.enqueue(name, priority);
cout << "Patient added successfully." << endl;
break;
case 2:
priority = queue.get_priority();
name = queue.dequeue();
cout << "Patient '" << name << "' with priority '" << priority
<< "' removed." << endl;
break;
case 3:
queue.display();
break;
case 4:
cout << "\n\n// END OF CODE\n\n" << endl;
break;
default:
cout << "Please choose a valid option (1-4)." << endl;
break;
}
} while (ch != 4);
return 0;
}