回 帖 发 新 帖 刷新版面

主题:急急急,哪位大哥给看一下啊

已知(K1,K2,...,Kp)是堆,则可以写一个时间复杂度为O(logn)的算法将(K1,K2,...Kp,Kp+1)调整为堆.试编写"从P=1起,逐个插入建堆"的算法,并讨论由此方法建堆的时间复杂度.
我编的程序哪位大哥帮我改改啊
#include "stdio.h"
#define MAX_SIZE 100
#define FALSE 0
#define TRUE 1
#define Swap(x,y,t)((t)=(x),(x)=(y),(y)=(t))
typedef struct info{
    int key;
}
Void Build_Heap(Heap &H,int n)
{
    for(i=2;i<n;i++)
    {j=i;
     while(j!=1)
     {k=j/2;
      if(H.r[j].key>H.r[k].key)
          H.r[j]<->H.r[k];
      j=k;
     }
    }
}
Void main()
{element heap[MAX_SIZE];
 int n=20;
 Build_Heap(H,20);
}

回复列表 (共2个回复)

沙发

#include "stdio.h"

#define NOMEM -1
#define OK 0

#define MAX_SIZE 20

typedef int ELEM_TYPE;

typedef struct _HEAP
{
        ELEM_TYPE *array;
        int n;
        int max_size;
        
}HEAP, *pHEAP;


int create_empty_heap(HEAP* heap, int m)
{
    heap->array = (ELEM_TYPE*)malloc(sizeof(ELEM_TYPE) * (m+1));
    if(heap->array == NULL)
    {
         return NOMEM;
    }
    heap->max_size = m;
    heap->n = 1;
    return OK;
}

int is_empty(const HEAP* heap)
{
    return (heap->n == 1);
}

int is_full(const HEAP* heap)
{
    return (heap->n == heap->max_size + 1);
}

void add_heap(HEAP* heap, const ELEM_TYPE e)
{
     int i;
     int j;
     if(is_full(heap))
     {
          printf("full!\n");
          return;
     }
     i = heap->n;
     j = i / 2;
     while(j > 0)
     {
         if(e > heap->array[j])
         {
             break;
         }
         heap->array[i] = heap->array[j];
         i = j;
         j /= 2;
     }
     heap->array[i] = e;
     heap->n++;
}

void print_heap(const HEAP* heap)
{
     int i;
     for(i = 1; i < heap->n; i++)
     {
           printf("%d ", heap->array[i]);
     }
}

void free_heap(HEAP* heap)
{
     free(heap->array);
}


int main(void)
{
    HEAP heap;
    create_empty_heap(&heap, MAX_SIZE);
    ELEM_TYPE array[10] = { 1, 5, 10, 78, 54, 33, 45, 4, 69, 20};
    int i;
    for(i = 0; i < 10; i++)
    {
          add_heap(&heap, array[i]);
    }
    print_heap(&heap);
    free_heap(&heap);
    getch();
    return 0;
}

板凳


谢谢大哥了啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册