Advertisement
ElfikCo

Kopce

May 30th, 2019
365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int * kopiec_przywroc(int*, int, int*);
  5. int * kopiec_buduj(int*, int*, int);
  6. //kopiec_usun_max();
  7. int * kopiec_wstaw(int*, int, int*);
  8. //kopiec_sort();
  9. int parent(int);
  10.  
  11. int main(){
  12.  
  13.     int *A = calloc(1,sizeof(int)), length_a = 0, heap_size = 0;
  14.     int quit = 1, i;
  15.     char znak;
  16.  
  17.     A[0] = 0; // heap_size
  18.     system("cls");
  19.  
  20.     while(quit){
  21.         printf("\nWybierz akcje: ");
  22.         printf("\n[D] - Dodaj element do kopca");
  23.         printf("\n[U] - Usun maksymalny element");
  24.         printf("\n[S] - Posortuj");
  25.         printf("\n[W] - Wyswietl tablice");
  26.         printf("\n[Q] - Wyjdz");
  27.         fflush(stdin);
  28.         scanf("%c", &znak);
  29.  
  30.         system("cls");
  31.  
  32.         switch(znak){
  33.             case 'd':
  34.                 printf("Podaj wartosc do dodania: ");
  35.                 scanf("%d", &i);
  36.                 A = kopiec_wstaw(A, i, &heap_size);
  37.                 break;
  38.             case 'u':
  39.                 break;
  40.             case 's':
  41.                 break;
  42.             case 'w':
  43.                 for(i = 1; i <= heap_size; i++)
  44.                     printf("%d ", A[i]);
  45.                 break;
  46.             case 'q':
  47.                 quit = 0;
  48.                 break;
  49.         }
  50.     }
  51.  
  52.     free(A);
  53.     return 0;
  54. }
  55.  
  56. int *kopiec_wstaw(int *table, int key, int * heap_size){
  57.     int i = ++(*heap_size);
  58.     int pi = parent(i);
  59.     table = realloc(table,*(heap_size)*sizeof(int));
  60.     while (i > 1 && table[pi] < key){
  61.         table[i-1] = table[pi];
  62.         i = pi;
  63.     }
  64.     table[i] = key;
  65.     return table;
  66. }
  67.  
  68. int parent(int i){
  69.     return (i-1)/2;
  70. }
  71.  
  72. int * kopiec_przywroc(int *table, int i, int heap_size){
  73.     int l = 2 * i, r = 2 * i + 1;
  74.     int max, temp;
  75.     if (l <= heap_size && table[l] > table[i])
  76.         max = l;
  77.     else
  78.         max = i;
  79.     if (r <= heap_size && table[r] > table[max])
  80.         max = r;
  81.     if (max != i){
  82.         temp = table[max];
  83.         table[max] = table[i];
  84.         table[i] = temp;
  85.         kopiec_przywroc(table,max,heap_size);
  86.     }
  87.     return table;
  88. }
  89.  
  90. int * kopiec_buduj(int * table, int *heap_size, int length_a){
  91.     int i;
  92.     *(heap_size) = length_a;
  93.     for (i = *(heap_size)/2; i > 1; i--){
  94.         table = kopiec_przywroc(table, i, heap_size);
  95.     }
  96.     return table;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement