При вставке узлов в кучу, как использовать пузырь вверх? - PullRequest
0 голосов
/ 01 декабря 2010

Ниже приведен мой код, который неправильно отображает большее значение. Может ли кто-нибудь помочь. Проблема несколько в счет ++.

#include<iostream>
using namespace std;

class heap{
public:
    int count;
    heap(int c)
    {
        count=c;
    }
    int Arr[10];
    void insert(int num);
    void deletemax();
    void print();
};

void heap::insert(int num){
    if(count==10){
        cout<<"Heap full\n";
        exit(1);
    }
    else{
        Arr[count]=num;
        count++;   //The real problem arises here that the compiler adds 1 to count and when the code moves ahead it sets position var to count++ value and tries to compare a value at Arr[POS] with its parent whereas there is no value at this place set uptill.
    }
    int POS=count;
    while(Arr[POS]>Arr[(POS-1)/2]){
        int temp;
        temp=Arr[POS];
        Arr[(POS-1)/2]=temp;
        POS=(POS-1)/2;
    }
}

void heap::print(){
    for(int i=0; i<10; i++){
        cout<<Arr[i]<<endl;
    }
}

int main(){
    heap h(0);
    int a;
    int b=0;
    while(b<10){
        cout<<"Insert node in heap\n";
        cin>>a;
        h.insert(a);
        b++;
    }
    h.print();
    return 0;
}

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

Есть много проблем с кодом, который вы разместили, некоторые из которых включают в себя:

  1. Что касается вашей конкретной проблемы, я думаю, вам нужно изменить строку в heap :: insert () на "int POS = count-1;" , чтобы правильно начать итерацию с конца массив.
  2. Вам необходимо рассмотреть случай добавления элемента в пустой массив и то, что происходит в коде сортировки.
  3. Ваш конструктор позволяет кому-то создать кучу, которая будет переполнять массив фиксированного размера, например heap (1000) . Кроме того, элемент Arr не инициализирован, что означает, что он имеет неопределенные данные для любого значения, но heap (0) . В этом случае ваш конструктор не должен принимать никаких параметров, и счетчик должен быть просто инициализирован равным 0.
  4. Назначение кода сбивает с толку. Это куча, отсортированный массив, попытка приблизить кучу с массивом, ничего из вышеперечисленного? Если вы просто пытаетесь реализовать отсортированный массив фиксированного размера, то я считаю, что ваш код сортировки в insert () не будет работать (например, рассмотрите возможность добавления 100 в кучу, содержащую [1,2,3]).

Существуют и другие, более простые вещи, неправильные (например, не использовать контейнеры STL, открытый класс, передача неконстантных параметров, «использование std» и т. Д.), Но я предполагаю, что вы просто экспериментируете / играет здесь.

1 голос
/ 01 декабря 2010

Я бы согласился, вот в чем ваша проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...