The /usr/include directory contains the standard headers for the C programming language, or at least most of them (see GCC documentation for details); /usr/g++include contains similar headers for C++. (If this doesn't make any sense to you, don't worry, you can probably ignore it in that case.)
The symbolic links /usr/include/asm and /usr/include/linux point to the similarly named directories in the kernel source tree (see /usr/src ) for whatever kernel version you are running. They are needed because some type declarations are kernel version dependent. (You may need to update these links when you upgrade the kernel, or the header files.)