typedef struct item {
type data;
struct item next;
} Item;
and now the C compiler will go to try to figure out how large Item is. But since next is embedded right in Item, it'll end up with an equation like this
size-of-Item = size-of-type + size-of-Item
You end up with an infinitely large data structure that would use an infinite amount of memory, and that of course can't work.