MOOC浙江大学のデータ構造-05-ヒープ内のツリー7パス(25ポイント)

この記事とMOOCでのヒープ挿入の説明を参照し、この記事を参照してください05-ツリー7ヒープ内のパス(25ポイント)
エラー1:ph-> element =(int *)malloc((n + 1)* sizeof(int)); //ポインタにスペースを割り当てるのを忘れた

    ph->element = (int*)malloc((n+1)*sizeof(int));//忘记给指针分配空间了
    ph->element[0] = -10005;

エラー2://パイルがいっぱい
かどうかをここに判断する必要がありますif(ph-> size == ph-> maxsize){/
return;
}
いっぱいになっている場合は、挿入せずに試してください。判断せずに
エラーを渡すことができます3:ここでフォーマットを制御する方法を覚えておいてください

        if(i==1){
    
    
            cout<<ph->element[1]<<endl;
        }
        else{
    
    
            cout<<ph->element[i]<<" ";
        }
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct heap *Pheap;
struct heap{
    
    
    int *element;
    int size;
    int maxsize;
};
Pheap create(int n);
Pheap create(int n){
    
    
    Pheap ph;
    ph = (Pheap)malloc(sizeof(struct heap));
    ph->element = (int*)malloc((n+1)*sizeof(int));//忘记给数组分配空间了
    ph->element[0] = -10005;
    ph->size = 0;//错写成1
    ph->maxsize = n;
    return ph;
}
void insert(Pheap ph, int t);
void insert(Pheap ph, int t){
    
    
    //这里需要加一个判断堆满了么
    if(ph->size==ph->maxsize){
    
    
        return;
    }
    int i;
    i = ++ph->size;//这个地方错写成 ph->size+1,疑问 函数也可以修改这个值了么,是因为用指针访问的么
    ph->element[i] = t;
    for(;t<ph->element[i/2];i = i/2){
    
    //wrong used ph->element[i]>ph->element[i/2]
        ph->element[i] = ph->element[i/2];//wrong used ph->element[i/2] = ph->element[i]; always make mistakes
    }
    ph->element[i] = t;
    //无返回值就可以return ph;
}
void print(Pheap ph,int m){
    
    
    for(int i=m;i>=1;i/=2){
    
    //竟然写成了i=0为条件,错的离谱
        if(i==1){
    
    
            cout<<ph->element[1]<<endl;
        }
        else{
    
    
            cout<<ph->element[i]<<" ";
        }
    }
}
int main(){
    
    
    int N,M;
    cin>>N>>M;
    Pheap ph;
    ph = create(N);
    for(int i=0;i<N;++i){
    
    
        int v;
        cin>>v;
        insert(ph,v);
    }
    for(int i=0;i<M;++i){
    
    
        int m;
        cin>>m;
        print(ph,m);
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_43919570/article/details/105229831