Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2022, 16:03   #1
tolq
Новичок
Джуниор
 
Регистрация: 25.10.2022
Сообщений: 1
По умолчанию В этой задаче необходимо реализовать структуру данных Куча, с++

В этой задаче необходимо реализовать структуру данных Куча, поддерживающую следующие операции:

CLEAR — сделать кучу пустой.

ADD n — добавить в кучу число n.

EXTRACT — удалить из кучи минимальное значение и вывести на экран данное значение. Если куча была пустой, необходимо вывести "CANNOT".

Суммарное количество всех операций не превышает 200000.

входные данные
ADD 192168812
ADD 125
ADD 321
EXTRACT
EXTRACT
CLEAR
ADD 7
ADD 555
EXTRACT
EXTRACT
EXTRACT
выходные данные
125
321
7
555
CANNOT


входные данные
CLEAR
ADD 7
ADD 555
EXTRACT
EXTRACT
EXTRACT
CLEAR
EXTRACT
ADD 321847
EXTRACT
EXTRACT
ADD 127307
ADD 949912
ADD 840884
ADD 654060
EXTRACT
EXTRACT
выходные данные
7
555
CANNOT
CANNOT
321847
CANNOT
127307
654060
tolq вне форума Ответить с цитированием
Старый 26.10.2022, 23:38   #2
Evgeny173
 
Регистрация: 21.10.2022
Сообщений: 8
По умолчанию

Код:
#include <iostream>
using namespace std;

#define HEAP_MAX_CPT 200000

class Heap{

public:
    Heap() { _CurSize = 0; }
    void Clear() { _CurSize = 0; }
    void Add( int n )
    {
        if( _CurSize+1 > HEAP_MAX_CPT ) { cout<<"> CANNOT"<<endl; return; }
        _aHeap[_CurSize++] = n;
    }
    void Extract( void )
    {
        if( _CurSize == 0 ) { cout<<"> CANNOT"<<endl; return; }
        size_t i_min = 0;
        // find min value
        for( size_t i = 1; i < _CurSize; ++i )
            if( _aHeap[i] < _aHeap[i_min] ) i_min = i;
        cout<<"> "<<_aHeap[i_min]<<endl;
        // delete _aHeap[i_min]
        for( size_t i = i_min; i < _CurSize-1; ++i )
            _aHeap[i] = _aHeap[i+1];
        _CurSize--;
    }

private:
    size_t _CurSize;
    int _aHeap[HEAP_MAX_CPT];
};

int main()
{
    Heap h;
    int n;
    string s;

    while(1)
    {
        cin>>s;
        if( s == "ADD" )
        {
            cin >> n;
            h.Add(n);
        }
        else if( s == "CLEAR" ) h.Clear();
        else if( s == "EXTRACT" ) h.Extract();
    }

    return 0;
}
Evgeny173 вне форума Ответить с цитированием
Старый 28.10.2022, 06:03   #3
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Evgeny173, у вас не heap, а обычный массив без инвариантов. Heap -- это что-то типа такого:
https://en.wikipedia.org/wiki/Binary_heap
Пётр Седов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(Питон)Реализуйте структуру данных, представляющую собой расширенную структуру стек Alisa15 Помощь студентам 2 30.09.2022 18:34
Реализовать структуру данных Динамический массив и функции Jhlee Фриланс 4 28.09.2022 13:05
как написать программу по этой задаче? Olgaandsasha Общие вопросы C/C++ 1 24.10.2011 19:06
В этой задаче нужно просто подставить значения? ketik Помощь студентам 2 11.12.2010 12:29