codice:#include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 typedef int Boolean; struct list { int value; struct list * next_ptr; }; void init( struct list ** ptrptr ); void visit( struct list * ptr ); void pre_insert( struct list ** ptrptr, int value ); void newlist(struct list **ptr, int A, struct list **dst_ptr); main() { Boolean itera = TRUE; int value; int scelta; struct list * ptr, * dst_ptr; int A; // inizializzazione della lista init( &ptr ); init ( &dst_ptr); do { // menù di scelta printf( "\nScegli operazione:\n" ); printf( "1. inserisci un elemento nella lista 1\n" ); printf( "2. crea la lista dei multipli di A, rimuovendoli dalla lista 1\n"); printf( "3. visita la lista 1\n"); printf( "4. visita la lista dei multipli di A\n"); printf( "0. esci\n" ); // legge la scelta scanf( "%d", &scelta ); // pulisce lo schermo system("cls"); // chiamata delle funzioni sulla lista switch ( scelta ) { case 1: // inserimento lista 1 printf( "\ninserisci valore: " ); scanf( "%d", &value ); // funzione di inserimento prefisso nella lista pre_insert( &ptr, value); break; case 2: // crea lista degli elementi divisibili per A, rimuovendoli dalla lista principale printf( "\ninserisci il divisore: "); scanf( "%d", &A); newlist( &ptr, A, &dst_ptr); break; case 3: // visita la lista 1 printf( "\n\nlista 1: " ); visit( ptr ); break; case 4: // visita la lista dei multipli di A printf( "\n\nlista multipli di A: " ); visit( dst_ptr ); break; case 0: itera = FALSE; break; default: // in ogni altro caso ripresenta il menù printf( "\nscelta errata!" ); break; } } while ( itera ); system("PAUSE"); return 0; } void newlist( struct list **ptrptr, int A, struct list ** dst_ptr) { struct list *tmp; while ( *ptrptr != NULL ) { if( (*ptrptr)->value % A == 0) { tmp = *ptrptr; while (*dst_ptr != NULL) { *dst_ptr = (*dst_ptr)->next_ptr; } *dst_ptr = tmp; ptrptr = &(*ptrptr)->next_ptr; } else *ptrptr = (*ptrptr)->next_ptr; } } void init( struct list ** ptrptr ) /* inizializzazione */ { *ptrptr = NULL; } void visit( struct list * ptr ) /* visita della lista */ { while ( ptr != NULL ) { printf( "%d ", ptr->value ); ptr = ptr->next_ptr; } } void pre_insert( struct list ** ptrptr, int value ) /* inserisce in testa */ { struct list * tmp_ptr; tmp_ptr = *ptrptr; *ptrptr = (struct list *) malloc( sizeof(struct list)); (*ptrptr)->value = value; (*ptrptr)->next_ptr = tmp_ptr; }

Rispondi quotando