C++ Priority Queues(优先队列) and C++ Queues(队列)

C++优先队列类似队列, 但是在这个数据结构中的元素按照一定的断言排列有序。

empty()如果优先队列为空,则返回真
pop()删除第一个元素
push()加入一个元素
size()返回优先队列中拥有的元素的个数
top()返回优先队列中有最高优先级的元素

C++队列是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。

back()返回最后一个元素
empty()如果队列空则返回真
front()返回第一个元素
pop()删除第一个元素
push()在末尾加入一个元素
size()返回队列中元素的个数
以下是一个简单的多级反馈队列调度算法的 C++ 实现,其中包含三个队列,每个队列的时间片大小不同,优先级也不同。代码如下: ```c++ #include <iostream> #include <queue> using namespace std; const int TIME_QUANTUM[] = {4, 8, 16}; // 三个队列的时间片大小 const int QUEUE_NUM = 3; // 三个队列 struct Process { int id; // 进程 ID int time; // 进程需要执行的时间 int priority; // 进程优先级 }; queue<Process> queues[QUEUE_NUM]; // 三个队列 void run(Process process) { while (process.time > 0) { for (int i = 0; i < QUEUE_NUM; i++) { if (!queues[i].empty()) { Process p = queues[i].front(); queues[i].pop(); int time_quatum = TIME_QUANTUM[i]; // 时间片大小 if (p.time > time_quatum) { // 该进程还需要执行 p.time -= time_quatum; queues[i].push(p); // 放回队列 } else { // 该进程执行完毕 p.time = 0; cout << "Process " << p.id << " finished." << endl; } } } process.time--; } } void schedule(Process processes[], int n) { for (int i = 0; i < n; i++) { queues[processes[i].priority].push(processes[i]); } for (int i = 0; i < QUEUE_NUM; i++) { cout << "Queue " << i << ":" << endl; while (!queues[i].empty()) { Process p = queues[i].front(); run(p); queues[i].pop(); } } } int main() { Process processes[] = {{1, 12, 0}, {2, 8, 1}, {3, 6, 2}, {4, 10, 1}, {5, 4, 0}}; int n = sizeof(processes) / sizeof(processes[0]); schedule(processes, n); return 0; } ``` 这个实现中,我们首先将所有进程按照它们的优先级放进对应的队列里,然后按照队列的优先级依次执行每个队列里面的进程,直到所有进程都执行完毕。在每个队列中,我们使用固定的时间片大小来限制每个进程的执行时间。如果进程在一个队列执行了一段时间后没有执行完,就被放回到队列的末尾,等待下一次执行。当一个进程执行完毕后,我们输出一条消息,表示这个进程已经完成了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七情六欲·

学生党不容易~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值