An abstract data type is a data type whose representation is hidden from the client.
A heap is an array object representing an incomplete binary tree.
A stack is a set of items in which the element to be deleted is known in advance, specifically, the last element inserted into the set. That's why it's said to implement a LIFO (last-in, first-out) policy.
The preprocessor is a piece of software which takes care of editing a file by replacing directives before the program gets compiled. The directives are #define , #include , #error , #line , #pragma .