queueNodeT is the name of the type that the typedef statement is trying to create.
An alternate way to specify this is:
struct queueNodeTag {
...
};
typedef struct queueNodeTag queueNodeT;
In C (vs. C++), "struct queueNodeTag" just defines a struct named "queueNodeTag". In C++ [should you get there], this would also define a type named "queueNodeTag"
When creating a pointer variable to the struct, it's slightly shorter to use:
queueNodeT *my_pointer;
than:
struct queueNodeTag *my_pointer;
The trailing "T" is just a coding convention to denote that it's a type name and not a variable. You can use others. Mine is:
struct mystructname {
...
};
typedef struct mystructname mystructname_t;
typedef mystructname_t *mystructname_p;
Using mystructname_p, you can change:
struct mystructname *my_pointer;
mystructname_t *my_pointer;
into:
mystructname_p my_pointer;
The "_t" is fairly common. The "_p" thing is my convention, but, I believe other conventions define pointers to types as "p<Mytype>", such as "pMystructName". I much prefer using a suffix for this [and "snake case" notation rather than the "camel hump" notation in your example].