Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

esercizio di linguaggio c

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

esercizio di linguaggio c

Postdi JALLOUL » 15/02/07 12:27

ciao a tutti
grazie per poter aiutarmi a svolgere questo esercizio

esercisio:

Modificare il programma che mette nell'ordine una successione dei numeri di interi per poter mettere nell'ordine che ascende una “ linked list„ dove i dati di ogni nodo sia un intero. (Per generare e maneggiare la lista possiamo modificare e il utilizzare i function nel questo programma


/* questo file contiene alcune funzioni C per la gestione e manipolazione
di linked list. L' implementazione delle function di manipolazione qui
presentata e' solo una tra molte alternative. Viene fornita solo come
esempio, senza pretesa di costituire la migliore soluzione.
Non tutte le function sono effettivamente usate nel programma di prova. */

#define MAXLN 40
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef struct nodo
{
char nome[MAXLN];
struct nodo *successivo;
} nodo;



nodo *crea_nodo( void )
/* alloca memoria per un nuovo elemento ritornando un puntatore a questo
spazio */
/* N.B. la creazione di un nuovo elemento NON lo inserisce nella lista:
* nessun elemento punta ancora al nuovo e questo non punta a nessuno
* p->successivo punta a NULL */
{
nodo *nuovo_nodo;

nuovo_nodo = malloc(sizeof(nodo) );
if ( nuovo_nodo == NULL )
{
printf( "crea_nodo: malloc failed \n");
exit(1);
}
nuovo_nodo->successivo = NULL;
return nuovo_nodo;
}



void aggiungi_nodo( nodo *nuovo_nodo , nodo **inizio)
/* questa function aggiunge un elemento del tipo nodo in fondo alla lista
* di primo elemento "inizio" */
{
nodo *nodo_corrente;
if ( *inizio == NULL)
{
*inizio = nuovo_nodo;
return;
}

for( nodo_corrente = *inizio ; nodo_corrente->successivo != NULL ;
nodo_corrente = nodo_corrente->successivo)
; // con questo for arriviamo all' ultimo nodo
nodo_corrente->successivo = nuovo_nodo;
return;

}



void inserisci_dopo(nodo *q, nodo *p)
/* inserisce il nodo p dopo il nodo q */
{
if ( p == NULL || q == NULL || p==q || q->successivo == p )
{
printf("inserisci_dopo : inserzione non valida\n");
return;
}
p->successivo = q->successivo;
q->successivo = p;
return;

}



void elimina(nodo *eliminando, nodo **inizio)
{
nodo *p;

if (eliminando == *inizio)
{
if((*inizio)->successivo != NULL)
*inizio = eliminando->successivo;
else
*inizio=NULL;
}
else
{
for(p=*inizio; (p!= NULL) && (p->successivo !=eliminando);p = p->successivo)
if ( p == NULL)

{
printf("elimina: Errrore: non c'e' l' elemento cercato nella lista \n");
return;
}
p->successivo = p->successivo->successivo;
}
free(eliminando);
eliminando=NULL;
}



void scrivi_lista(nodo *inizio)
{
nodo *p;
int count=0;

if(inizio == NULL) printf("lista vuota\n");
else {
p=inizio;
do{count++;
printf("%s\n",p->nome);
p= p->successivo;
}
while(p != NULL);
}
printf("%d elementi\n",count);

return;
}



nodo *trova_nome( char *nome , nodo *inizio)
{
nodo *p;
p=inizio;

do{
if(strcmp(nome,p->nome)==0) return p;
}while((p=p->successivo) != NULL);

return NULL;
}




int main(void)
{
char ans, buffer[80];
nodo *inizio=NULL; /* "inizio" e' il puntatore all' inizio della
lista inizializzato a NULL */

nodo *p;
int non_trovato;
p=inizio;
while(1)
{
printf(" new element ? (y/n) ");
fgets(buffer,80,stdin);
buffer[strlen(buffer)-1]='\0';
sscanf(buffer,"%c",&ans);
if(ans == 'n') break;
p=crea_nodo();
fgets(buffer,80,stdin);
buffer[strlen(buffer)-1]='\0';
sscanf(buffer,"%40s",p->nome);
aggiungi_nodo(p,&inizio);
}

do{
scrivi_lista(inizio);
printf(" quale vuoi eliminare ? ");
scanf("%79s",buffer);

if((p=trova_nome(buffer,inizio)) != NULL)
{
printf("Trovato ! : %s \n",p->nome);
non_trovato=0;
elimina(p,&inizio);
scrivi_lista(inizio);
}
else
{
printf("Elemento non trovato. Riprova\n");
non_trovato=1;
}
} while(non_trovato);


return 0;

}


grazie 1000.
JALLOUL
Newbie
 
Post: 1
Iscritto il: 14/02/07 14:20

Sponsor
 

Postdi pjfry » 15/02/07 17:31

stai cercando consigli o cerchi qualcuno che faccia i compiti al posto tuo? non mi pare che hai scritto che problemi stai trovando :-?
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni


Torna a Programmazione


Topic correlati a "esercizio di linguaggio c":


Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti