Реализация минимальной кучи с использованием приоритетной очереди

C++C++Beginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы научимся реализовывать минимальную кучу с использованием приоритетной очереди на C++. Мы напишем программу на C++, которая сможет выполнять базовые операции с минимальной кучей.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("C++")) -.-> cpp/BasicsGroup(["Basics"]) cpp(("C++")) -.-> cpp/ControlFlowGroup(["Control Flow"]) cpp(("C++")) -.-> cpp/FunctionsGroup(["Functions"]) cpp(("C++")) -.-> cpp/IOandFileHandlingGroup(["I/O and File Handling"]) cpp(("C++")) -.-> cpp/StandardLibraryGroup(["Standard Library"]) cpp(("C++")) -.-> cpp/SyntaxandStyleGroup(["Syntax and Style"]) cpp/BasicsGroup -.-> cpp/variables("Variables") cpp/ControlFlowGroup -.-> cpp/for_loop("For Loop") cpp/FunctionsGroup -.-> cpp/function_parameters("Function Parameters") cpp/IOandFileHandlingGroup -.-> cpp/output("Output") cpp/StandardLibraryGroup -.-> cpp/standard_containers("Standard Containers") cpp/SyntaxandStyleGroup -.-> cpp/code_formatting("Code Formatting") subgraph Lab Skills cpp/variables -.-> lab-96147{{"Реализация минимальной кучи с использованием приоритетной очереди"}} cpp/for_loop -.-> lab-96147{{"Реализация минимальной кучи с использованием приоритетной очереди"}} cpp/function_parameters -.-> lab-96147{{"Реализация минимальной кучи с использованием приоритетной очереди"}} cpp/output -.-> lab-96147{{"Реализация минимальной кучи с использованием приоритетной очереди"}} cpp/standard_containers -.-> lab-96147{{"Реализация минимальной кучи с использованием приоритетной очереди"}} cpp/code_formatting -.-> lab-96147{{"Реализация минимальной кучи с использованием приоритетной очереди"}} end

Создайте новую программу на C++

Создайте новую программу на C++ в директории ~/project, выполнив следующие команды в терминале:

cd ~/project
touch main.cpp

Подключите необходимые заголовочные файлы

Начнем с подключения необходимых заголовочных файлов в нашей программе:

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

Определите функцию show()

Далее определим функцию, которая будет выводить элементы минимальной кучи. Эта функция принимает приоритетную очередь в качестве аргумента и использует копию приоритетной очереди для сохранения исходной приоритетной очереди.

// Функция для вывода элементов минимальной кучи
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()

В функции 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

Полный код 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;
}

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++. Мы определили функцию для вывода элементов минимальной кучи, создали приоритетную очередь целых чисел, заполнили ее элементами и вывели количество элементов в минимальной куче, первый элемент или элемент с наивысшим приоритетом, элементы минимальной кучи, минимальную кучу после удаления наименьшего элемента и количество элементов в минимальной куче после удаления наименьшего элемента.