#include <bits/stdc++.h>
using namespace std;
// ProcessControlBlock
struct PCB
{
int ID;
string name;
int priority;
PCB* next;
PCB(int id, string n, int p)
{
ID = id;
name = n;
priority = p;
next = nullptr;
}
};
class ProcessList {
private:
PCB* head;
public:
ProcessList()
{
head = nullptr;
}
// Tao PCB moi va them vao dau danh sach
void addProcess(int ID, const string& name, int priority)
{
PCB* newPCB = new PCB(ID, name, priority);
newPCB->next = head;
head = newPCB;
cout << "Added: ID=" << ID << ", Name=" << name << ", Priority=" << priority << endl;
}
// Duyet tim ID tuong ung va loai bo no
void removeProcess(int ID)
{
PCB* current = head;
PCB* prev = nullptr;
while (current != nullptr)
{
if (current->ID == ID) {
if (prev == nullptr) {
head = current->next;
} else {
prev->next = current->next;
}
cout << "Removed: ID=" << ID << ", Name=" << current->name << endl;
delete current;
return;
}
prev = current;
current = current->next;
}
cout << "Process with ID=" << ID << " not found." << endl;
}
// In thong tin cua cac tien trinh
void displayProcesses()
{
cout << "Process List:" << endl;
PCB* current = head;
while (current != nullptr)
{
cout << "ID=" << current->ID << ", Name=" << current->name << ", Priority=" << current->priority << " -> ";
current = current->next;
}
cout << "nullptr" << endl;
}
~ProcessList()
{
PCB* current = head;
while (current != nullptr) {
PCB* next = current->next;
delete current;
current = next;
}
}
};
int main() {
ProcessList readyQueue;
readyQueue.addProcess(101, "Editor", 2);
readyQueue.addProcess(102, "Compiler", 1);
readyQueue.addProcess(103, "Browser", 3);
readyQueue.displayProcesses();
readyQueue.removeProcess(102);
readyQueue.displayProcesses();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gUHJvY2Vzc0NvbnRyb2xCbG9jawpzdHJ1Y3QgUENCIAp7CiAgICBpbnQgSUQ7CiAgICBzdHJpbmcgbmFtZTsKICAgIGludCBwcmlvcml0eTsKICAgIFBDQiogbmV4dDsKCiAgICBQQ0IoaW50IGlkLCBzdHJpbmcgbiwgaW50IHApCiAgICB7CiAgICAgICAgSUQgPSBpZDsKICAgICAgICBuYW1lID0gbjsKICAgICAgICBwcmlvcml0eSA9IHA7CiAgICAgICAgbmV4dCA9IG51bGxwdHI7CiAgICB9Cn07CgpjbGFzcyBQcm9jZXNzTGlzdCB7CnByaXZhdGU6CiAgICBQQ0IqIGhlYWQ7CgpwdWJsaWM6CiAgICBQcm9jZXNzTGlzdCgpCiAgICB7CiAgICAgICAgaGVhZCA9IG51bGxwdHI7CiAgICB9CgogICAgLy8gVGFvIFBDQiBtb2kgdmEgdGhlbSB2YW8gZGF1IGRhbmggc2FjaAogICAgdm9pZCBhZGRQcm9jZXNzKGludCBJRCwgY29uc3Qgc3RyaW5nJiBuYW1lLCBpbnQgcHJpb3JpdHkpIAogICAgewogICAgICAgIFBDQiogbmV3UENCID0gbmV3IFBDQihJRCwgbmFtZSwgcHJpb3JpdHkpOwogICAgICAgIG5ld1BDQi0+bmV4dCA9IGhlYWQ7CiAgICAgICAgaGVhZCA9IG5ld1BDQjsKICAgICAgICBjb3V0IDw8ICJBZGRlZDogSUQ9IiA8PCBJRCA8PCAiLCBOYW1lPSIgPDwgbmFtZSA8PCAiLCBQcmlvcml0eT0iIDw8IHByaW9yaXR5IDw8IGVuZGw7CiAgICB9CgogICAgLy8gRHV5ZXQgdGltIElEIHR1b25nIHVuZyB2YSBsb2FpIGJvIG5vCiAgICB2b2lkIHJlbW92ZVByb2Nlc3MoaW50IElEKSAKICAgIHsKICAgICAgICBQQ0IqIGN1cnJlbnQgPSBoZWFkOwogICAgICAgIFBDQiogcHJldiA9IG51bGxwdHI7CgogICAgICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGxwdHIpIAogICAgICAgIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnQtPklEID09IElEKSB7CiAgICAgICAgICAgICAgICBpZiAocHJldiA9PSBudWxscHRyKSB7CiAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGN1cnJlbnQtPm5leHQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHByZXYtPm5leHQgPSBjdXJyZW50LT5uZXh0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY291dCA8PCAiUmVtb3ZlZDogSUQ9IiA8PCBJRCA8PCAiLCBOYW1lPSIgPDwgY3VycmVudC0+bmFtZSA8PCBlbmRsOwogICAgICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnQ7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJldiA9IGN1cnJlbnQ7CiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OwogICAgICAgIH0KICAgICAgICBjb3V0IDw8ICJQcm9jZXNzIHdpdGggSUQ9IiA8PCBJRCA8PCAiIG5vdCBmb3VuZC4iIDw8IGVuZGw7CiAgICB9CgogICAgLy8gSW4gdGhvbmcgdGluIGN1YSBjYWMgdGllbiB0cmluaAogICAgdm9pZCBkaXNwbGF5UHJvY2Vzc2VzKCkgIAogICAgewogICAgICAgIGNvdXQgPDwgIlByb2Nlc3MgTGlzdDoiIDw8IGVuZGw7CiAgICAgICAgUENCKiBjdXJyZW50ID0gaGVhZDsKICAgICAgICB3aGlsZSAoY3VycmVudCAhPSBudWxscHRyKSAKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgIklEPSIgPDwgY3VycmVudC0+SUQgPDwgIiwgTmFtZT0iIDw8IGN1cnJlbnQtPm5hbWUgPDwgIiwgUHJpb3JpdHk9IiA8PCBjdXJyZW50LT5wcmlvcml0eSA8PCAiIC0+ICI7CiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OwogICAgICAgIH0KICAgICAgICBjb3V0IDw8ICJudWxscHRyIiA8PCBlbmRsOwogICAgfQoKICAgIH5Qcm9jZXNzTGlzdCgpIAogICAgewogICAgICAgIFBDQiogY3VycmVudCA9IGhlYWQ7CiAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbHB0cikgewogICAgICAgICAgICBQQ0IqIG5leHQgPSBjdXJyZW50LT5uZXh0OwogICAgICAgICAgICBkZWxldGUgY3VycmVudDsKICAgICAgICAgICAgY3VycmVudCA9IG5leHQ7CiAgICAgICAgfQogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBQcm9jZXNzTGlzdCByZWFkeVF1ZXVlOwoKICAgIHJlYWR5UXVldWUuYWRkUHJvY2VzcygxMDEsICJFZGl0b3IiLCAyKTsKICAgIHJlYWR5UXVldWUuYWRkUHJvY2VzcygxMDIsICJDb21waWxlciIsIDEpOwogICAgcmVhZHlRdWV1ZS5hZGRQcm9jZXNzKDEwMywgIkJyb3dzZXIiLCAzKTsKCiAgICByZWFkeVF1ZXVlLmRpc3BsYXlQcm9jZXNzZXMoKTsKCiAgICByZWFkeVF1ZXVlLnJlbW92ZVByb2Nlc3MoMTAyKTsKICAgIHJlYWR5UXVldWUuZGlzcGxheVByb2Nlc3NlcygpOwoKICAgIHJldHVybiAwOwp9
Added: ID=101, Name=Editor, Priority=2
Added: ID=102, Name=Compiler, Priority=1
Added: ID=103, Name=Browser, Priority=3
Process List:
ID=103, Name=Browser, Priority=3 -> ID=102, Name=Compiler, Priority=1 -> ID=101, Name=Editor, Priority=2 -> nullptr
Removed: ID=102, Name=Compiler
Process List:
ID=103, Name=Browser, Priority=3 -> ID=101, Name=Editor, Priority=2 -> nullptr