介绍
在本实验中,我们将学习如何使用 C++ 中的优先队列(Priority Queue)实现一个最小堆(Min Heap)。我们将实现一个 C++ 程序,该程序可以对最小堆执行基本操作。
在本实验中,我们将学习如何使用 C++ 中的优先队列(Priority Queue)实现一个最小堆(Min Heap)。我们将实现一个 C++ 程序,该程序可以对最小堆执行基本操作。
在终端中运行以下命令,在 ~/project 目录下创建一个新的 C++ 程序:
cd ~/project
touch main.cpp
我们首先在程序中包含必要的头文件:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
接下来,我们定义一个函数来打印最小堆的元素。该函数以优先队列作为参数,并使用优先队列的副本来保持原始优先队列不变。
// 打印最小堆元素的函数
void show(priority_queue<int, vector<int>, greater<int>> q)
{
// 将优先队列复制到另一个队列中以保持原始优先队列不变
priority_queue<int, vector<int>, greater<int>> mh = q;
while (!mh.empty())
{
cout << "\t" << mh.top(); // 打印最顶部的元素
mh.pop(); // 删除最顶部的元素以移动到下一个元素
}
cout << endl;
}
在 main() 函数中,我们将创建一个整数类型的优先队列并填充元素。
int main()
{
// 创建一个整数类型的优先队列
priority_queue<int, vector<int>, greater<int>> minHeap;
// 向优先队列中填充元素
for (int i = 1; i < 6; i++)
{
minHeap.push(i * 20);
}
// 打印最小堆中的元素数量
cout << "最小堆中的元素数量为:" << minHeap.size() << endl;
// 打印第一个元素或优先级最高的元素
cout << "第一个元素或优先级最高的元素是:" << minHeap.top() << endl;
// 打印最小堆的元素
cout << "最小堆的元素为:";
show(minHeap);
// 删除最小堆中的第一个或最小元素
minHeap.pop();
// 删除最小元素后打印最小堆
cout << "删除最小堆中的第一个或最小元素后,最小堆变为:";
show(minHeap);
// 删除最小元素后打印最小堆中的元素数量
cout << "删除最小元素后,最小堆中的元素数量为:" << minHeap.size() << endl;
return 0;
}
要编译程序,请在终端中运行以下命令:
g++ main.cpp -o main
该命令会编译 main.cpp 源代码并生成一个名为 main 的可执行文件。
要运行程序,请执行以下命令:
./main
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
// 打印最小堆元素的函数
void show(priority_queue<int, vector<int>, greater<int>> q)
{
// 将优先队列复制到另一个队列中以保持原始优先队列不变
priority_queue<int, vector<int>, greater<int>> mh = q;
while (!mh.empty())
{
cout << "\t" << mh.top(); // 打印最顶部的元素
mh.pop(); // 删除最顶部的元素以移动到下一个元素
}
cout << endl;
}
int main()
{
// 创建一个整数类型的优先队列
priority_queue<int, vector<int>, greater<int>> minHeap;
// 向优先队列中填充元素
for (int i = 1; i < 6; i++)
{
minHeap.push(i * 20);
}
// 打印最小堆中的元素数量
cout << "最小堆中的元素数量为:" << minHeap.size() << endl;
// 打印第一个元素或优先级最高的元素
cout << "第一个元素或优先级最高的元素是:" << minHeap.top() << endl;
// 打印最小堆的元素
cout << "最小堆的元素为:";
show(minHeap);
// 删除最小堆中的第一个或最小元素
minHeap.pop();
// 删除最小元素后打印最小堆
cout << "删除最小堆中的第一个或最小元素后,最小堆变为:";
show(minHeap);
// 删除最小元素后打印最小堆中的元素数量
cout << "删除最小元素后,最小堆中的元素数量为:" << minHeap.size() << endl;
return 0;
}
在本实验中,我们学习了如何使用 C++ 中的优先队列(Priority Queue)实现一个最小堆(Min Heap)。我们定义了一个函数来打印最小堆的元素,创建了一个整数类型的优先队列,填充了元素,并打印了最小堆中的元素数量、第一个元素或优先级最高的元素、最小堆的元素、删除最小元素后的最小堆以及删除最小元素后最小堆中的元素数量。