Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- void heap_restore(int *tab,int i,int n);
- void heap_build(int *tab,int n);
- int heap_delete_max(int *tab);
- int left(int i);
- int right(int i);
- int parent(int i);
- int main()
- {
- char znak='d';
- int *tab=NULL,n,i;
- while(znak!='q')
- {
- printf("Co chcesz zrobic?\nw - wyswietlenie tablicy\nt - tworzenie tablicy\nb - budowanie kopca\nq - wyjscie z programu\n");
- fflush(stdin);
- scanf("%c",&znak);
- switch (znak)
- {
- case 't':
- fflush(stdin);
- scanf("%d",&n);
- tab=(int *)realloc(tab,sizeof(int)*n);
- for(i=0;i<n;i++)
- {
- fflush(stdin);
- scanf("%d",tab+i);
- }
- break;
- case 'w':
- for(i=0;i<n;i++)
- {
- printf("%d ",*(tab+i));
- }
- break;
- case 'b':
- heap_build(tab,n);
- break;
- default:
- break;
- }
- }
- }
- void heap_restore(int *tab,int i,int n)
- {
- int heap_size=n, najwiekszy, tmp, l, r,j;
- l=left(i);
- r=right(i);
- if(l < heap_size && *(tab+l)> *(tab+i))
- najwiekszy=l;
- else
- najwiekszy=i;
- if(r < heap_size && *(tab+r) > *(tab+najwiekszy))
- najwiekszy=r;
- if(najwiekszy != i)
- {
- tmp=*(tab+najwiekszy);
- *(tab+najwiekszy)=*(tab+i);
- *(tab+i)=tmp;
- heap_restore(tab,najwiekszy,heap_size);
- }
- }
- void heap_build(int *tab,int n)
- {
- int heap_size=n,i;
- for(i=(n-1)/2;i>=0;i--)
- heap_restore(tab,i,heap_size);
- }
- int heap_delete_max(int *tab)
- {
- }
- int left(int i)
- {
- return 2*i+1;
- }
- int right(int i)
- {
- return 2*i+2;
- }
- int parent(int i)
- {
- return (i-1)/2;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement