PROBLEMA problema programma heap minimo

Pubblicità

galloper

Nuovo Utente
Messaggi
1
Reazioni
0
Punteggio
24
ragazzi ho un problema su una parte di um programma per creare e modificare un heap minimo.il problema è questo nella funzione cambio scegliendo un elemento tra quellli già inseriti dovrei scegliere la priorità da dare agli elementi e scambiare l'elemento con quello situato nella posizione scelta potete aiutarmi??sono scarso con i puntatori e non riesco proprio a metterlo a posto..

- - - Updated - - -

ragazzi ho un problema su una parte di um programma per creare e modificare un heap minimo.il problema è questo nella funzione cambio scegliendo un elemento tra quellli già inseriti dovrei scegliere la priorità da dare agli elementi e scambiare l'elemento con quello situato nella posizione scelta potete aiutarmi??sono scarso con i puntatori e non riesco proprio a metterlo a posto..
il testo è questo dimenticavo
#include <stdio.h>
#include <conio.h>
#define MAX 20
typedef struct nodo{
int chiave;
int prio;} heap;

int inserisci(heap *radice, int n)
{int i, temp;
if(n==MAX){ printf("heap completo, impossibile inserire altri valori"); return n;}
printf("digitare il valore da inserire: ");
scanf("%d", &temp);
i=++n;
while(i!=1 && temp<radice[i/2].chiave){
radice.chiave=radice[i/2].chiave;
radice.prio=radice[i/2].prio;
i=i/2;
}
radice.chiave=temp;
radice.prio=temp;
return n;
}
void visualizza(heap *radice, int n)
{int i;
for(i=1; i<=n; i++) printf("%d ", radice.chiave);
fflush(stdin);
getchar();
}
int crea(heap *radice)
{int n, i=0;
do{
printf("inserire il numero di valori da inserire: ");
scanf("%d", &n);}
while(n<1 && n>=MAX);
while(i<n) i=inserisci(radice, i);
return n;
}
int elimina(heap *radice, int n)
{int padre, figlio; heap temp;
temp.chiave=radice[n].chiave;
temp.prio=radice[n].prio;
n--;
padre=1; figlio=2;
while(figlio<=n){
if((figlio<n)&&(radice[figlio].prio>radice[figlio+1].prio)) figlio++;
if(temp.prio<=radice[figlio].prio) break;
radice[padre].chiave=radice[figlio].chiave;
radice[padre].prio=radice[figlio].prio;
padre=figlio; figlio *=2;
}
radice[padre]=temp;
return(n);
}
int cambio(heap *radice, int n)
{heap ele; int i=1,m;
printf("digitare l'elemento a cui cambiare la priorita': ");
scanf("%d", &ele.chiave);
int v=radice.chiave;
while(i<=n && radice.chiave!=ele.chiave) i++;
if(i>n) {printf("elemento non trovato\nimpossibile continuare"); fflush(stdin); getchar(); return n;}
printf("\ninserire la priorita' dell'elemento: ");
scanf("%d", &ele.prio);
i=n;
while(i!=1 && ele.prio<radice[i/2].prio){
radice.chiave=radice[i/2].chiave;
radice.prio=radice[i/2].prio;
i=i/2;

}
int Scambia (int *f1, int *f2){
*f2=i;
*f1=ele.prio;
*f1=*f2;
}
Scambia (&i,&ele.prio);
radice.chiave=ele.chiave;
radice.prio=ele.prio;

}

main()
{
int scelta, n=0; heap radice[MAX];
do{
printf("\t\t***MENU***\n");
printf("1) Creare un heap minimo\n");
printf("2) Eliminare il campo chiave con il valore piu' piccolo\n");
printf("3) Cambiare la priorita' di un elemento arbitrario\n");
printf("4) Inserire un elemento nell'heap\n");
printf("5) Visualizza il contenuto dell'heap\n");
printf("0) Uscita\n");
printf("\tSCEGLIERE TRA LE SEGUENTI OPZIONI: ");
scanf("%d", &scelta);
switch(scelta){
case 0: printf("\t**FINE**"); break;
case 1: n=crea(radice); break;
case 2: if(n>0) n=elimina(radice,n);
else printf("impossibile eliminare elemento\theap vuoto");
break;
case 3: n=cambio(radice,n); break;
case 4: n=inserisci(radice,n); break;
case 5: visualizza(radice,n); break;
default: printf("scelta errata..."); break;
}
}
while(scelta);
fflush(stdin);
getchar();
}
 
Pubblicità
Pubblicità
Indietro
Top