Union is a data type that allows you to store different data types in the same memory location, i.e., the program can use any one data type at a time.
Typedef can be used to give a new name for the extisting types.
For example, consider the definition given below in your program
typedef int INTEGER;
Now, you can use
INTEGER a1, a2;
which will be the same as