codice:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

#define SIZE 20

typedef struct nodo{
       char cognome[20];
       char nome[20];
       char telefono[20];
       struct nodo *succ;
       }agenda;

int main()
{
  agenda *k, *pun;
  FILE *rubrica;
  int count = 0,i = 0;
  
  
  if ((rubrica = fopen("agenda.txt", "r")) == NULL)
  {          
      printf("Il File che stai cercando di aprire non esiste\n");
  }
  else
  {
      k = (agenda *)malloc(sizeof(agenda));
      if(k==NULL)
      { 
          printf("Memoria esaurita\n");
      }
      else
      {
          fscanf(rubrica,"%s",k->cognome);
          fscanf(rubrica,"%s",k->nome);
          fscanf(rubrica,"%s",k->telefono);
          pun = k;
          count++;
          while(!feof(rubrica))
            {
              pun->succ = (agenda *)malloc(sizeof(agenda)); 
              pun = pun->succ ;               
              fscanf(rubrica,"%s",pun->cognome);
              fscanf(rubrica,"%s",pun->nome);
              fscanf(rubrica,"%s",pun->telefono);
              count++;
            }
          pun->succ = NULL;
          printf("Numero di record trovati: %d\n",count);
          pun = k;
          do   
          {                                   
                printf("\nNome: %s\t Cognome: %s\t Telefono: %s\t\n",pun->nome,pun->cognome,pun->telefono);
                pun=pun->succ;                
          }while(pun != NULL);
          pun = k;
          char** strs = (char**)malloc(sizeof(char*) * count);
          for(i = 0; i < count; i++) 
          { 
            strs[i] = (char*)malloc(sizeof(char) * SIZE); 
            char* value = pun->cognome; 
            strcpy(strs[i], value); 
            pun = pun->succ;
          } 
          
          int j=0;
          char* minore;
          char* maggiore;
          char* scambio;
          int scmabia = 0;
          for(i = 0;i < (count-2); i++)
          {
             int scambia = 0;   
             for(j=i+1;j<(count-1);j++)
                {
                    if(strs[j] < strs[i])
                       minore = strs[j];
                       scambia = 1;  
                }
             if (scambia == 1)
             {
                maggiore = strs[i];
                strs[i] = minore;
                strs[j] = maggiore;
                strcpy(strs[i],minore);
                strcpy(strs[j],maggiore);            
             }   
          }
          for(i = 0; i < count; i++) 
                  printf(">> %s <<\n", strs[i]);   
          for(i = 0; i < count; i++) 
                free(strs[i]); 
                free(strs); 
    
      }
  }
  

  fclose(rubrica);
  printf("\n");
  system("PAUSE");	
  return 0;
}