Vediamo di chiarire:
codice:
struct libro
{
    char titolo[30];
    char autore[30];
};
Questa è una semplice struttura. Quando dovrai creare delle variabili di questa struttura, dovrai fare:

struct libro unLibro;

facendo invece:
codice:
typedef struct libro
{
    char titolo[30];
    char autore[30];
} LIBRO;
Puoi poi dichiarare:

LIBRO unLibro;

Nota che con la typedef, la parola 'libro' dopo struct la potresti anche togliere.

A quel punto potresti fare:

typedef LIBRO* PLIBRO;

e ottieni PLIBRO che è un nuovo tipo di dato che è un puntatore a LIBRO.