In ogni caso, come troverai scritto sul tuo libro, il typedef serve a creare degli alias per altri tipi. L'idioma del "typedef struct { ... }" è una "espressione idiomatica del C" dovuta al fatto che se dichiari una struct "normalmente":
codice:
struct nomestruct
{
    int a;
};
poi per usarla devi sempre scrivere sempre "struct nomestruct", dato che in C le struct "vivono" in un namespace diverso rispetto agli altri nomi. Per alleggerire la notazione, spesso si fa invece:
codice:
typedef struct
{
    int a;
} nomestruct;
che dichiara "nomestruct" come alias della struct anonima "struct { int a; }"; dato che nomestruct ora non è inteso come nome dato ad una struct, ma come typedef, non serve più specificare "struct nomestruct" quando lo si vuole usare (anzi, è un errore), ma basta "nomestruct".