편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2017.11.06

    C언어 Heap관련 질문입니다.


    typedef struct HeapElement
    {
        DSKEY  heKey;
        void *  heData;
    } HeapElement;
    
    struct Heap
    {
        int         hpMode; /* Minimize or Maximize */
        int         hpSize;
        int        hpFilled;
        int        hpGrowBy;
        HeapElement**  hpArray;
        HEAPCMPFUNC    hpCmpFunc;
        HEAPCHGFUNC    hpChgFunc;   // *(void*, jnt)
    };
    
    heapInsert(HEAP heap,const DSKEY key,void *data)
    {
        Heap    *   h = (Heap*)heap;
        HeapElement *   he;
        int         i, pidx;
        HeapInternCmp   cmp_func;
    
        //맥스힙, 민힙 중 설정
        if (h->hpMode == HEAP_MINIMIZE)
            cmp_func = heap_larger;
        else 
            cmp_func = heap_smaller;
    
        /* 1. Make a new element */
        he = heap_new_element(key,data);
    
        /* 2. Grow the heap if needed */
    
        if (NEEDS2GROW(h) && heap_grow(h))
    
        /* 3. Insert the new element into the heap */
    
        i = HSIZE(h);
        pidx = HPARENT(i);
        printf("i: %d pidx: %d\n",  i, pidx);
        int pdd;
        int hed;
        if(pidx >= 0)
        {
            pdd = *(int*)HARRAY(h, pidx)->heKey;
            hed = *(int*)he->heKey;
    
            printf("pidx: %d, he: %d\n", pdd, hed);
        }
    
        while (i > 0 && cmp_func(h,HARRAY(h,pidx),he))
        {
            int t = pidx;
            HARRAY(h, pidx) = HARRAY(h, i);
            HARRAY(h,i) = HARRAY(h, t) ;
    
            i = pidx;
            pidx = HPARENT(i);
        }
    
    

    console

    Heap관련 과제 중 질문드립니다. 코드는 새로운 key와 data를 힙에 삽입하는 ADT구요. main에서 반복적으로 실행합니다.(KEY랑 DATA랑 같은 것으로 취급합니다.) 질문드리고 싶은것은 콘솔화면을 보시면 아시겠지만 분명 0번 힙에 첫 인풋값인 14를 저장했는데, 어찌된일인지 그 다음 콜에서는 0번자리 값이 14가 아닌 그다음 인풋인 25로 저장이 되어 있네요.... 추측해보건데 참조문제 인 것 같은데, 도저히 어떻게 고쳐야할지 감이 안잡힙니다...ㅠㅠ