An Abstract Data Type (which see) is specified by a list of axioms giving the legal operations defined on the data structure, along with semantics: what the operations actually do, and (possibly) bounds on time and space required to perform them.
In most cases, the specification and implementation are confused, and the actual data structure gets called the ADT. This is not a problem in "everyday" use.
The data type is abstract in the sense that nothing is specified about its particular implementation in the program. Thus, the Forth dictionary is a data structure of a Forth interpreter; a small hash table with open hashing is a common implementation; the ADT (or rather, the precise set of operations that this data structure allows!) is a mapping of words to their definitions, with few performance guarantees made. All are descriptions of the same thing, though.
Examples of ADTs include binary trees, hash tables, red-black trees, and arrays. As you can see, almost all of these are descriptions of implementation strategies, rather than the ADT itself.