A computational problem is specified by a desired input-output relationship. For example a sorting problem is defined by an input array being unsorted and an output array being sorted.
An instance of a problem is consists of an input needed to compute a solution to the problem.
An Algorithm is said to be correct if, for every input sequence, it halts with the correct output.
An abstract data type is a data structure and a collection of functions or procedures which operate on the data structure.