Salve ancora una volta e scusatemi nuovamente il disturbo. Sapreste indicarmi gli errori in questi due codici? Nel primo caso non riesco ad inizializzare "inizioalbero" con la malloc, mi dà errore il compilatore, mentre nel secondo non funziona la funzione "inserimentoordinato" (mi crasha l'exe). Grazie ancora, se supero l'esame vi faccio un monumento.
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct albero{
int elemento;
struct albero* ramodestro;
struct albero* ramosinistro;
};
void creaalbero (struct albero **inizioalbero, int numero);
void stampaalbero (struct albero inizioalbero);
int main(int argc, char *argv[])
{
struct albero* inizioalbero=NULL;
int numero, scelta;
printf ("Digita 1 per inserire un numero, o 0 per terminare il programma");
scanf ("%d", scelta);
while (scelta==1){
printf ("Digita il numero da inserire nell'albero:\n");
scanf ("%d", &numero);
if (inizioalbero == NULL){
inizioalbero=malloc(sizeof(albero));
inizioalbero->elemento=numero;
inizioalbero->ramodestro=NULL;
inizioalbero->ramosinistro=NULL;}
else {
if (numero < inizioalbero->elemento)
{creaalbero(&(inizioalbero->ramosinistro), numero);}
else if (numero > inizioalbero->elemento)
{creaalbero(&(inizioalbero->ramodestro), numero);}
else
printf ("Numero gia' inserito");}
printf ("Digita 1 per inserire un numero, o 0 per terminare il programma");
scanf ("%d", scelta)};
system("PAUSE");
return 0;
}
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct numeri{
int elemento;
struct numeri *succ;
};
void inseriscitesta(struct numeri **il);
void stampalista (struct numeri* il);
void inseriscicoda(struct numeri **il);
void distruggilista(struct numeri **il);
void ricerca(struct numeri* il, int z);
void cancellanodo(struct numeri **il, int l);
void inserimentoordinato(struct numeri **il);
int main(int argc, char *argv[])
{
int y;
struct numeri* il=NULL;
inserimentoordinato(&il);
inseriscicoda (&il);
stampalista(il);
il= malloc (sizeof (struct numeri));
il->succ=NULL;
printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
scanf ("%d", &y);
if (y==1)
{printf ("Inserisci il nuemero:\n");
scanf ("%d", &il->elemento);}
inseriscitesta(&il);
stampalista (il);
distruggilista (&il);
stampalista (il);
inseriscicoda (&il);
stampalista (il);
int l;
printf ("Inserisci il numero da cancellare\n");
scanf ("%d", &l);
cancellanodo (&il, l);
stampalista (il);
distruggilista (&il);
inserimentoordinato(&il);
stampalista(il);
int z;
printf ("Inserisci il numero da cercare\n");
scanf ("%d", &z);
ricerca (il, z);
system("PAUSE");
return 0;
}
void inseriscitesta(struct numeri **il){
int y;
printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
scanf ("%d",&y);
while (y==1)
{
struct numeri* p2 = NULL;
p2= malloc (sizeof(struct numeri));
p2->succ=NULL;
printf ("Digita il numero da inserire:\n");
scanf ("%d", &p2->elemento);
p2->succ = *il;
*il = p2;
printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
scanf ("%d",&y);}}
void stampalista (struct numeri *il){
while ( il!=NULL)
{
printf ("%d ---->", il->elemento);
il=il->succ;}}
void inseriscicoda(struct numeri **il){
int m;
printf ("\nDigita 1 per inserire un numero, altrimenti digita 0\n");
scanf ("%d",&m);
while (m==1)
{
if (*il==NULL){
struct numeri* p2 = NULL;
p2= malloc (sizeof(struct numeri));
p2->succ=NULL;
printf ("Digita il numero da inserire:\n");
scanf ("%d", &p2->elemento);
p2->succ = *il;
*il = p2;}
else
{
struct numeri* tm= *il;
while (tm->succ!=NULL)
tm = tm->succ;
struct numeri* nuovo= malloc(sizeof(struct numeri));
printf("Digita il numero\n");
scanf("%d", &nuovo->elemento);
nuovo->succ=NULL;
tm->succ=nuovo;}
printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
scanf ("%d",&m);}}
void distruggilista(struct numeri **il){
struct numeri* tmp = NULL;
while (*il != NULL)
{
tmp= (*il)->succ;
free(*il);
*il=tmp;}}
void ricerca (struct numeri *il, int z){
while (il != NULL && z!=il->elemento)
il=il->succ;
if (il->elemento==z)
printf ("Il numero e' stato trovato\n");
else printf ("Il numero non e' stato trovato\n");}
void cancellanodo (struct numeri **il, int l){
struct numeri* nodoprecedente;
struct numeri* nodocorrente;
struct numeri* nodotemporaneo;
if ((*il)->elemento == l){
nodotemporaneo = *il;
*il = (*il)->succ;
free (nodotemporaneo);}
else{
nodoprecedente = *il;
nodocorrente = (*il)->succ;
while(nodocorrente != NULL && nodocorrente->elemento != l){
nodoprecedente = nodocorrente;
nodocorrente = nodocorrente->succ;}
if (nodocorrente != NULL) {
nodotemporaneo = nodocorrente;
nodoprecedente->succ = nodocorrente->succ;
free (nodotemporaneo);
}}}
void inserimentoordinato (struct numeri **il){
struct numeri* nodoprecedente;
struct numeri* nodocorrente;
struct numeri* nuovonodo;
int h;
printf ("Digita 1 per inserire un numero o 0 per terminare\n");
scanf ("%d", h);
while (h==1){
int u;
nuovonodo = malloc(sizeof(struct numeri));
printf ("Digita il numero da inserire\n");
scanf ("%d",&u);
nuovonodo->elemento=u;
nodoprecedente=NULL;
nodocorrente=*il;
while(nodocorrente!=NULL && u > nodocorrente->elemento){
nodoprecedente=nodocorrente;
nodocorrente=nodocorrente->succ;}
if (nodoprecedente == NULL){
nuovonodo->succ = *il;
*il=nuovonodo;}
else {
nodoprecedente->succ=nuovonodo;
nuovonodo->succ=nodocorrente;}
printf ("Digita 1 per inserire un numero o 0 per terminare\n");
scanf ("%d", h);}}