Advertisement
elektryk798

kopce_C

Jun 1st, 2017
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.51 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void heap_restore(int *tab,int i,int n);
  5. void heap_build(int *tab,int n);
  6. int heap_delete_max(int *tab);
  7. int left(int i);
  8. int right(int i);
  9. int parent(int i);
  10. int main()
  11. {
  12.     char znak='d';
  13.     int *tab=NULL,n,i;
  14.     while(znak!='q')
  15.     {
  16.         printf("Co chcesz zrobic?\nw - wyswietlenie tablicy\nt - tworzenie tablicy\nb - budowanie kopca\nq - wyjscie z programu\n");
  17.         fflush(stdin);
  18.         scanf("%c",&znak);
  19.         switch (znak)
  20.         {
  21.             case 't':
  22.                 fflush(stdin);
  23.                 scanf("%d",&n);
  24.                 tab=(int *)realloc(tab,sizeof(int)*n);
  25.                 for(i=0;i<n;i++)
  26.                 {
  27.                     fflush(stdin);
  28.                     scanf("%d",tab+i);
  29.                 }
  30.             break;
  31.             case 'w':
  32.                 for(i=0;i<n;i++)
  33.                 {
  34.                     printf("%d ",*(tab+i));
  35.                 }
  36.             break;
  37.             case 'b':
  38.                 heap_build(tab,n);
  39.             break;
  40.             default:
  41.            
  42.             break;
  43.         }
  44.     }
  45. }
  46.  
  47. void heap_restore(int *tab,int i,int n)
  48. {
  49.     int heap_size=n, najwiekszy, tmp, l, r,j;
  50.     l=left(i);
  51.     r=right(i);
  52.     if(l < heap_size && *(tab+l)> *(tab+i))
  53.         najwiekszy=l;
  54.     else
  55.         najwiekszy=i;
  56.     if(r < heap_size && *(tab+r) > *(tab+najwiekszy))
  57.         najwiekszy=r;
  58.     if(najwiekszy != i)
  59.     {
  60.         tmp=*(tab+najwiekszy);
  61.         *(tab+najwiekszy)=*(tab+i);
  62.         *(tab+i)=tmp;
  63.         heap_restore(tab,najwiekszy,heap_size);
  64.     }
  65. }
  66. void heap_build(int *tab,int n)
  67. {
  68.     int heap_size=n,i; 
  69.     for(i=(n-1)/2;i>=0;i--)
  70.         heap_restore(tab,i,heap_size);
  71. }
  72. int heap_delete_max(int *tab)
  73. {
  74.  
  75. }
  76. int left(int i)
  77. {
  78.     return 2*i+1;
  79. }
  80. int right(int i)
  81. {
  82.     return 2*i+2;
  83. }
  84. int parent(int i)
  85. {
  86.     return (i-1)/2;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement