Si no sabes cuantas listas tendrás, puedes hacer con edd (estructuras de datos dinámicas)
Algo asi:
struct ficha {
char nombre[20];
char apellido[20];
unsigned int nota;
struct ficha *next;
};
Si lo sabes, puedes hacer un array de estructuras.
Después de entrar todas las fichas que necesites, puedes ordenarlo:
Algo como esto:
if (ficha[0].nota > ficha[1].nota) {
ficha_auxiliar = ficha[1];
ficha[1] = ficha[0];
ficha[0] = ficha_auxiliar;
}
Ficha auxiliar sería un tipo de ficha temporal, usarlo solo como auxiliar. Ese método seria por bubblesort, que aunque no es el más eficiente, sirve para esto.
Saludos