Quote Originariamente inviata da torn24 Visualizza il messaggio
Mi sembrava molto chiaro , praticamente è l'algoritmo che ti serviva

Ho usato il passaggio del puntatore per valore nella funzione mescolamazzo, visto che non ho mai usato il passaggio per indirizzo !

Intendevo qualcosa del genere
codice:
#include <time.h>
#include<stdio.h>


typedef enum {CUORI=0,QUADRI,FIORI,PICCHE} TipoSeme;
typedef enum {DUE=2,TRE,QUATTRO,CINQUE,SEI,SETTE,OTTO,NOVE,DIECI,FANTE,DONNA,RE,ASSO} TipoValore;
typedef struct
{
    TipoSeme seme;
    TipoValore valore;
} TipoInfo;
typedef struct carta
{
    TipoInfo info;
    struct carta* next;




} TipoCarta;
typedef TipoCarta* TipoMazzo;




void InserisciCartaInTesta(TipoMazzo* indirizzo_mazzo, TipoCarta* indirizzo_carta);
TipoMazzo creaMazzo();
void stampaCarte(TipoMazzo mazzo);
TipoMazzo mescolaMazzo(TipoMazzo indirizzo_mazzo, int num_mescolate);




int main()
{
    TipoMazzo mazzo = NULL;




    mazzo = creaMazzo();
    printf("Mazzo appena creato:\n");
    stampaCarte(mazzo);
    mazzo=mescolaMazzo(mazzo,100);
    printf("\n\nMazzo dopo essere stato mescolato:\n");
    stampaCarte(mazzo);
    system("pause");


    return 0;
}




void InserisciCartaInTesta(TipoMazzo* indirizzo_mazzo, TipoCarta* indirizzo_carta)
{
    indirizzo_carta->next = *indirizzo_mazzo;
    *indirizzo_mazzo = indirizzo_carta;
}




TipoMazzo creaMazzo()
{
    TipoMazzo nuovo_mazzo = NULL;
    int i=0, j=0;
    for (i=0; i < 4; i++)
    {
        for (j=0; j < 13; j++)
        {
            TipoCarta* carta = (TipoCarta*)malloc(sizeof(TipoCarta));
            carta->info.seme = i;
            carta->info.valore = j+2;
            InserisciCartaInTesta(&nuovo_mazzo,carta);
        }
    }
    return nuovo_mazzo;
}




void stampaCarte(TipoMazzo mazzo)
{
    TipoCarta* carta = mazzo;
    while (carta != NULL)
    {
        switch(carta->info.valore)
        {
        case FANTE:
            printf("J ");
            break;
        case DONNA:
            printf("Q ");
            break;
        case RE:
            printf("K ");
            break;
        case ASSO:
            printf("A ");
            break;
        default:
            printf("%d ",carta->info.valore);
        }
        switch(carta->info.seme)
        {
        case QUADRI:
            printf("QUADRI, ");
            break;
        case CUORI:
            printf("CUORI, ");
            break;
        case PICCHE:
            printf("PICCHE, ");
            break;
        case FIORI:
            printf("FIORI, ");
        }
        carta = carta->next;
    }
}




TipoMazzo mescolaMazzo(TipoMazzo indirizzo_mazzo, int num_mescolate)
{
    /*
       1 in un ciclo FOR si genera un numero casuale da 0 a numero carte 
       2 in un puntatore temporaneo si fa puntare al primo nodo della lista 
       3 il puntatore lista , si fa puntare al secondo nodo ,"quello che era il primo elemento della lista          ora è raggiungibile solo col puntatore temporaneo "
       4 si scorre la lista , fino a raggiungere il nodo in posizione data dal numero casuale -1
       5 si salva il puntatore NEXT in un puntatore temporaneo es: tempnext
       6 si fa puntare a next , l'indirizzo del puntatore che contiene quello che era il primo nodo                "abbiamo inserito la carta"
       7 si fa puntare a , next->next =tempnext , collegando cosi gli altri nodi della lista
    */
    int i=0,j=0, rnd=1;
    TipoCarta *PrimoNodo ,*Tmpnext,*TmpLista;
    srand(time(NULL));
    for(i=0;i<num_mescolate;i++)
    {
        
        
        rnd = rand() % 52 + 1;
        if(rnd==0)rnd=1;
        
        PrimoNodo= indirizzo_mazzo;
        TmpLista=indirizzo_mazzo;
        indirizzo_mazzo=TmpLista->next;
        
        for(j=0;j<rnd && TmpLista->next!=NULL;j++)
        {
            
            TmpLista=TmpLista->next;
            
            
        }
           
        Tmpnext=TmpLista->next;
        TmpLista->next=PrimoNodo;
        TmpLista->next->next=  Tmpnext;
         
        
            
    }    
    return indirizzo_mazzo;
}

perfetto...gentilissimo. Grazie mille