Il vantaggio dell'array è quello di accedere ad uno qualsiasi dei suoi elemente a costo zero, mentre la lista, in generale, la devi scorrere. Se ad esempio vuoi modificare l'elemento centrale, con l'array lo fai immediatamente, mentre se hai una lista, prima devi ricercare l'elemento centrale, e poi puoi modificarlo. Per dirla in altre parole, non puoi applicare l'aritmetica dei puntatori ad una lista come invece faresti con un array.
Quindi dipende da cosa vuoi, la struttura dati che si adatta meglio la scopri solo così

.
Per quanto riguarda la realloc(), non ti preoccupare, non è un grosso problema. Generalmente io uso (in pseudocodice):
- Codice: Seleziona tutto
int size=X;
malloc(size);
if ( num_elementi == size )
realloc(size*=2);
inserisci();
in questo modo, le chiamate alla realloc() sono relativamente poche, se scegli bene X.
Spina